剥离驱动器号

时间:2010-01-05 09:59:58

标签: batch-file

使用D:drive

中文件夹中的命令
for /f "delims="  %%d in ('cd') do set pathdrv=%%d

echo %pathdrv%

我得到“d:\ some folder”。我想编写批处理命令以在驱动器的根目录中创建自动运行文件。请帮我剥去驱动器号“d:”,这样输出就是“\ some folder”,我还要做些什么来删除“\”。

2 个答案:

答案 0 :(得分:9)

简答:使用substring语法从%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
    
  3. 但是,

    • 控制台设置为“光栅字体”,而不是Lucida控制台或Consolas等TrueType字体。
    • 当前目录包含Unicode字符
      • 在当前的遗留代码页中没有任何代表(对于西方文化,CJK是一个不适合的好选择)。请记住,在这种情况下,您只会得到问号而不是字符。

    这个问题是,当你尝试设置设置它们的命令行时,whil环境变量可以保持 Unicode就好了你会遇到问题。上面详述的每个选项都依赖于在执行命令之前的某种输出。这有一个问题,即Unicode不会被保留,而是被?取代。唯一的例外是此答案一开始的子字符串变体,即使使用光栅字体,也会在路径中保留Unicode字符。

答案 1 :(得分:6)

致信:

%CD:~0,1%

完整驱动器名称(包括冒号):

%CD:~0,2%