我正在尝试实现与现有帖子here相同的功能,但我需要让它用于设置变量,同时考虑路径组件中的空格,而不是在循环内这样做,和路径中可能存在尾部反斜杠。我尝试了多种方法,这些方法让我“接近”,但并不完全。我当前的批处理文件是;
@echo off
echo.
goto start
:NormalizePath
set "%test%=%1.\%2"
exit /b
:start
SET test=C:\Program Files (x86)\SomeFolder\x64
echo Started with [%test%]
call :NormalizePath %test% "SignTool.exe"
echo Processed [%test%]
:end
echo.
我尝试过的;
以上产生:
Processed [C:\Program Files (x86)\SomeFolder\x64]
"SignTool.exe"
set
set test="%1.\%2"
结果:Processed ["C:\Program.\Files"]
将 set
set test="%1"\%2
结果:Processed ["C:\Program\Files"]
将 call
call :NormalizePath "%test%" SignTool.exe
结果为 Processed [""C:\Program Files (x86)\SomeFolder\x64"\SignTool.exe"]
(注意双引号)
进一步将 set
set test=%1\%2
会产生 Processed ["C:\Program Files (x86)\SomeFolder\x64"\SignTool.exe]
,这是 正确,但如果源路径有尾随
Processed ["C:\Program Files (x86)\SomeFolder\x64\"\SignTool.exe]
,则会产生 \
。
if "%TOOL_LOCATION:~-1%"=="\" (
set TOOL_LOCATION="%TOOL_LOCATION:~0,-1%"
)
SET test=%TOOL_LOCATION%\SignTool.exe
我几乎可以到达那里,同时考虑到源路径中的空格和可能的尾随反斜杠 - 但没有雪茄。我觉得我没有完全考虑路径和引用扩展,这使我的逻辑出现问题。
set "%test%=
将设置一个
变量,其名称为 [
test
的 content]您需要在引号中传递 both参数,因为 each 可能包含空格。 语法
%~1
从参数中删除引号。
然后从字符串中删除.\
(如果存在)。请注意,如果任一参数包含
.\
,这可能会干扰意图