例如,我有这样的循环,在名称包含百分号的文件夹上调用dir,因此解释器会尝试将这些字符之间的字符解析为变量。例如,这些文件夹在虚拟化解决方案(例如ThinApp)中是常见的,即存储在本地用户AppData中的数据被写入例如:X:\ My Virtualized App \%AppData%。
当然我知道可以通过将%加倍来实现它,但是不可能说服解释器在for循环中不解析这样的变量,例如:
FOR /F "tokens=*" %%F IN ('dir /b /s X:\myapp\%AppData% ') DO @(
echo %%F
)
这里无论我尝试什么,加倍,四倍的百分比,或添加插入符都没有区别。传递给dir命令的路径已经解析了appdata,因此无法使用两个驱动器规范。
答案 0 :(得分:5)
@ECHO OFF &SETLOCAL
FOR /F "delims=" %%F IN ('echo X:\myapp\%AppData%') DO (
echo %%F
)
FOR /F "delims=" %%F IN ('echo X:\myapp\^^%%AppData^^%%') DO (
echo %%F
)
FOR /F "delims=" %%F IN ('echo "X:\myapp\^^%%AppData^^%%"') DO (
echo %%F
)
FOR /F "delims=" %%F IN ('echo ^^"X:\myapp\^%%AppData^%%^"') DO (
echo %%F
)
输出:
X:\myapp\C:\Users\User\AppData\Roaming X:\myapp\%AppData% "X:\myapp\^^%AppData^^%" "X:\myapp\%AppData%"
答案 1 :(得分:2)
试试这个:
pushd X:\myapp\%%AppData%%
FOR /F "tokens=*" %%F IN ('dir /b /s') DO @(
echo %%F
)
popd
答案 2 :(得分:1)
setlocal
set "AppData="
FOR /F "tokens=*" %%F IN ('dir /b /s "X:\myapp\%%AppData%%"') DO @(
echo %%F
)
endlocal
或
FOR /F "tokens=*" %%F IN ('dir /b /s "X:\myapp\" ^| find /i "\%%appdata%%\"') DO @(
echo %%F
)