Variables 如何在windows批处理文件中防止变量解析(或转义百分比登录)for循环?
例如,我有这样一个循环,它在一个文件夹上调用dir,该文件夹的名称包含百分号,所以解释器尝试将这些字符之间的字符作为变量进行解析。例如,此类文件夹在虚拟化解决方案(例如ThinApp)中很常见,即将存储在本地用户AppData中的数据改为写入,例如:X:\My Virtualized App\%AppData% 当然,我知道可以通过将%加倍来通过它,但不可能说服解释器不在for循环中解析这样的变量,例如:Variables 如何在windows批处理文件中防止变量解析(或转义百分比登录)for循环?,variables,batch-file,for-loop,Variables,Batch File,For Loop,例如,我有这样一个循环,它在一个文件夹上调用dir,该文件夹的名称包含百分号,所以解释器尝试将这些字符之间的字符作为变量进行解析。例如,此类文件夹在虚拟化解决方案(例如ThinApp)中很常见,即将存储在本地用户AppData中的数据改为写入,例如:X:\My Virtualized App\%AppData% 当然,我知道可以通过将%加倍来通过它,但不可能说服解释器不在for循环中解析这样的变量,例如: FOR /F "tokens=*" %%F IN ('dir /b /s X:\myapp
FOR /F "tokens=*" %%F IN ('dir /b /s X:\myapp\%AppData% ') DO @(
echo %%F
)
在这里,无论我做了什么尝试,倍增、倍增百分比或添加插入符号都没有什么区别。传递给dir命令的路径已解析appdata,因此具有两种驱动器规格是无效的。请尝试以下操作:
pushd X:\myapp\%%AppData%%
FOR /F "tokens=*" %%F IN ('dir /b /s') DO @(
echo %%F
)
popd
或
逃跑的短途路线。
输出: X:\myapp\C:\Users\User\AppData\Roaming X:\myapp\%AppData% "X:\myapp\^^%AppData^^%" "X:\myapp\%AppData%" X:\myapp\C:\Users\User\AppData\Roaming X:\myapp\%AppData% “X:\myapp\^^%AppData^%” “X:\myapp\%AppData%”
好的..尽管它临时删除了
%appdata%
变量,但这仍然有效。所以至少我想知道为什么是否决票?
FOR /F "tokens=*" %%F IN ('dir /b /s "X:\myapp\" ^| find /i "\%%appdata%%\"') DO @(
echo %%F
)
@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%"