Batch file 带驱动器号

Batch file 带驱动器号,batch-file,Batch File,通过使用D:drive中文件夹中的命令 for /f "delims=" %%d in ('cd') do set pathdrv=%%d echo %pathdrv% 我得到“d:\some folder”。我想写批处理命令,在驱动器的根目录中创建自动运行文件。请帮助我剥离驱动器号“d:”,因此输出为“\some folder”,我要做什么额外的更改来剥离“\”简短回答:使用子字符串语法从%cd%伪变量中剥离前两个字符: %cd:~2% 要删除第一个反斜杠,请执行以下操作: %cd:~

通过使用D:drive中文件夹中的命令

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

echo %pathdrv%

我得到“d:\some folder”。我想写批处理命令,在驱动器的根目录中创建自动运行文件。请帮助我剥离驱动器号“d:”,因此输出为“\some folder”,我要做什么额外的更改来剥离“\”

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

%cd:~2%
要删除第一个反斜杠,请执行以下操作:

%cd:~3%
当控制台窗口设置为光栅字体时,即使使用Unicode路径,这也能可靠地工作


回答更长,详细说明更多选项(所有选项都不够好):

对于批处理文件的参数,可以使用特殊语法
%p1
,该语法提供批处理文件的第一个参数的路径(请参阅)

这与环境变量的工作方式不同,但您可以使用两种技巧:

  • 使用子程序:

    call :foo "%cd%"
    ...
    goto :eof
    :foo
    set result=%~p1
    goto :eof
    
    子例程可以有参数,就像批处理文件一样

  • 对使用

    for %%d in ("%cd%") do set mypath=%%~pd
    
  • 但是,这两种变体在以下情况下都不起作用:

    • 控制台设置为“光栅字体”,而不是TrueType字体,如Lucida console或ConsoleAs
    • 当前目录包含Unicode字符
      • 在当前遗留代码页中没有表示(对于西方文化,CJK是一个不适合的好选择)。请记住,在这种情况下,您只会得到问号,而不是字符
    问题是,尽管环境变量可以很好地保存Unicode,但一旦尝试设置设置它们的命令行,就会遇到问题。上面详述的每个选项在执行命令之前都依赖于某种输出。这个问题是Unicode没有被保留,而是被
    取代。唯一的例外是答案开头的子字符串变量,即使使用光栅字体,也会在路径中保留Unicode字符。

    驱动器号:

    %CD:~0,1%
    
    完整驱动器名称(包括冒号):


    嗯,对不起。当我详述你的答案时,我有点得意忘形。现在的实际答案完全不同,这是我在写作过程中研究的一个不幸的副作用。请随时回复。
    %CD:~0,2%