2010-01-05 22 views
2

通过使用命令从d一个文件夹:驱动地带盘符

for /f "delims=" %%d in ('cd') do set pathdrv=%%d 

echo %pathdrv% 

我得到“d:\某个文件夹”。我想编写批处理命令在驱动器的根目录中创建自动运行文件。请帮我去掉驱动器盘符“d:”,这样输出结果就是“\ some folder”,还有什么额外的改变来去除“\”。

回答

9

简短的回答:使用子语法前两个字符从%cd%伪变量剥离:

%cd:~2% 

要删除第一个反斜杠太:

%cd:~3% 

这可靠,即使工作控制台窗口设置为栅格字体时的Unicode路径。


再回应,详细介绍了一些更多的选择(其中没有工作不够好):

对于参数的批处理文件,你可以使用特殊的语法%p1,它给你的第一个参数的路径给定一个批处理文件(见this answer)。

这不起作用与环境变量的方式相同,但有两个技巧可以使用:

  1. 使用子程序:

    call :foo "%cd%" 
    ... 
    goto :eof 
    :foo 
    set result=%~p1 
    goto :eof 
    

    子程序可以有参数,就像批文件。

  2. 使用for

    for %%d in ("%cd%") do set mypath=%%~pd 
    

但是,这两个变种别当

  • 控制台设置为 “光栅字体”,而不是TrueType字体这样工作作为Lucida控制台或Consolas。
  • 当前目录包含Unicode字符
    • 这在目前的遗留代码页不表示(对西方文化中,中日韩是不符合一个不错的选择)。记住,在这种情况下,你只会得到问号而不是字符。

的问题,这是得到控制而环境变量可以持有统一就好了,你将进入的问题,一旦你尝试一个命令行设置,其他们。上面详述的每个选项都依赖于执行命令前的某种输出。这有一个问题,即Unicode不会保留,而是由?取代。唯一的例外是在这个答案的最开始的子字符串变体,它甚至在光栅字体的情况下在路径中保留Unicode字符。

+0

嗯,对不起。当你的答案扩展时,我有点被带走了。现在的答案现在完全不同了,这是我写作过程中不幸的副作用。随时恢复。 – Joey 2010-01-06 07:33:28

5

盘符:

%CD:~0,1% 

完整的驱动器名(含冒号):

%CD:~0,2%