示例:
set mydir=%CD%
echo %CD%
C:\Stuff\More Stuff\Lots of Stuff
那么应该如何使用变量呢?通常整个路径都可以用引号括起来,但变量呢?
for /f %G in (%mydir%\file.txt) DO (echo %G)
答案 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"
也会返回引号;但接受路径参数的命令会忽略它们,例如echo
或cd
, 例如)。
答案 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
为什么要设置一些你不需要的东西?