如何防止Windows批处理文件中的for循环中的变量解析(或转义百分号)?

rsk*_*k82 5 variables for-loop batch-file

例如,我有这样的循环,在名称包含百分号的文件夹上调用dir,因此解释器尝试将这些字符之间的字符解析为变量.这样的文件夹例如在虚拟化解决方案(例如ThinApp)中是常见的,即将存储在本地用户AppData中的数据改为写入例如:X:\ My Virtualized App \%AppData%.

当然我知道可以通过将%加倍来实现它,但是不可能说服解释器在for循环中不解析这样的变量,例如:

FOR /F "tokens=*" %%F IN ('dir /b /s X:\myapp\%AppData% ') DO @(
  echo %%F
)
Run Code Online (Sandbox Code Playgroud)

在这里,无论我尝试什么,加倍,四倍的百分比,或添加插入没有任何区别.传递给dir命令的路径已解析appdata,因此具有两个驱动器规范无效.

End*_*oro 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
)
Run Code Online (Sandbox Code Playgroud)

输出:

X:\myapp\C:\Users\User\AppData\Roaming
X:\myapp\%AppData%
"X:\myapp\^^%AppData^^%"
"X:\myapp\%AppData%"