Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何在windows批处理文件中防止变量解析(或转义百分比登录)for循环?_Variables_Batch File_For Loop - Fatal编程技术网

Variables 如何在windows批处理文件中防止变量解析(或转义百分比登录)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

例如,我有这样一个循环,它在一个文件夹上调用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,因此具有两种驱动器规格是无效的。

请尝试以下操作:

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%"