Batch file 如何让从文件中读取的百分比符号(%)在Windows批处理文件中展开?
这是文件Batch file 如何让从文件中读取的百分比符号(%)在Windows批处理文件中展开?,batch-file,Batch File,这是文件path.txt: %APPDATA%\foo 这是批处理文件读取路径.bat的一部分: ... for /f %%i in (path.txt) do if not defined fooDir ( if exist %%i ( set "fooDir=%%i" ) else ( >&2 echo ERROR: Invalid definition of fooDir: %%i paus
path.txt
:
%APPDATA%\foo
这是批处理文件读取路径.bat的一部分:
...
for /f %%i in (path.txt) do if not defined fooDir (
if exist %%i (
set "fooDir=%%i"
) else (
>&2 echo ERROR: Invalid definition of fooDir: %%i
pause
popd
exit /b 1
)
)
...
当我运行这个批处理文件时,它会提示
ERROR: Invalid definition of fooDir: %APPDATA%\foo
如何将其解析为C:\Users\user\AppData\Roaming\foo
,而不是%AppData%\foo
?可以使用以下代码:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "usebackq eol=| delims=" %%i in ("%~dp0path.txt") do if not defined fooDir (
set "FolderPath=%%~i"
setlocal EnableDelayedExpansion
call set "FolderPath=!FolderPath!"
for %%j in ("!FolderPath!\") do (
endlocal
if exist "%%~fj" (
set "fooDir=%%~fj"
) else (
endlocal
>&2 echo ERROR: Invalid definition of fooDir: %%j
pause
exit /B 1
)
)
)
set foodir
endlocal
该代码适用于批处理文件目录中的path.txt
中的以下文件夹路径:
%APPDATA%\foo
%APPDATA%\Development & Test()!
%APPDATA%\..\Roaming\Development & Test()!\\\
但它不适用于:
%APPDATA%\Development % Test()!
因此,如果文件夹路径另外包含零个或多个环境变量引用,并且还包含一个百分号,该百分号应被逐字解释为文件夹名称的一部分,则代码不起作用
命令调用左至设置“FolderPath=!FolderPath!”
将解释从文件读取的文件夹路径中的百分号,并展开环境变量引用,但也可以删除一个百分号,该百分号应解释为文字字符,而不是环境变量引用的开始/结束。cmd.exe
不应在当前目录中找到名为set
的文件,也不应在环境变量PATH
中列出文件扩展名为环境变量PATHEXT
的目录中找到,因为在这种情况下,将调用此可执行文件或脚本,而不是执行内部命令设置
根据Microsoft关于的文档,用于获取真正的绝对文件夹路径的内部,从包含相对路径部分的文件读取的文件夹路径始终以单个反斜杠结尾
注意:环境变量foodir
的定义始终以反斜杠结尾
要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
呼叫/?
echo/?
endlocal/?
退出/?
如果/?
暂停/?
设置/?
setlocal/?