将%CD%保存到变量中,但路径有空格。如果路径有空格,我如何使用我的变量?

时间:2017-01-23 17:39:52

标签: batch-file cmd

示例:

set mydir=%CD%

echo %CD% 
C:\Stuff\More Stuff\Lots of Stuff

那么应该如何使用变量呢?通常整个路径都可以用引号括起来,但变量呢?

for /f %G in (%mydir%\file.txt) DO (echo %G)

2 个答案:

答案 0 :(得分:1)

关键是正确的引用。以下语法是设置变量的唯一安全方法 - 假设值本身不包含引号,以及command extensions are enabled(无论如何都是默认值,并且几乎没有任何情况下命令扩展会干扰):

set "myDir=%CD%"

引号不会成为价值的一部分。

要在问题中尝试使用for /F循环中的值,请使用此方法(请记住将批处理文件中的%符号加倍):

for /F "usebackq" %G in ("%myDir%\file.txt") do (echo %~G)

现在需要option usebackq,以便不将引用的路径视为文字字符串。

编辑:在我注意到/F命令的for选项之前,这是前一个答案。
我不删除它,因为这可能对如果使用标准for循环:

要在问题中尝试使用for循环中的值,请使用此值(请记住将批处理文件中的%符号加倍):

for %G in ("%myDir%\file.txt") do (echo %~G)

~ modifier会从值中删除引号。

要确保扩展值始终用引号括起,请使用:

for %G in ("%myDir%\file.txt") do (echo "%~G")

通常,应始终引用路径,以避免出现空格和其他特殊字符的问题。例如,%myDir%包含类似D:\Docs & Data的路径,命令行echo D:\Docs & Data回显字符串D:\Docs SPACE 并尝试执行名为{的命令{1}},它不存在(最有可能),因为& symbol具有特殊含义,即在一行中连接两个单独的命令。引用类似Data的路径可以避免此问题(尽管echo "D:\Docs & Data"也会返回引号;但接受路径参数的命令会忽略它们,例如echocd , 例如)。

答案 1 :(得分:0)

使用此:

set mydir="%CD%"

echo %mydir%

或在循环案例中

set "mydir=%CD%"

echo "%mydir%"

for /f "usebackq delims=" %%G in ("%mydir%\file.txt") DO echo %%G

虽然我认为不使用

没有任何好处
echo "%__CD__%"

for /f "usebackq delims=" %%G in ("%__CD__%file.txt") DO echo %%G

为什么要设置一些你不需要的东西?