安全地将文件名附加到批处理文件变量的路径中

问题描述 投票:0回答:1

我正在尝试实现与现有帖子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

我几乎可以到达那里,同时考虑到源路径中的空格和可能的尾随反斜杠 - 但没有雪茄。我觉得我没有完全考虑路径和引用扩展,这使我的逻辑出现问题。

batch-file
1个回答
0
投票
set "%test%=

将设置一个

变量
,其名称为 [testcontent]
您需要在引号中传递 

both

参数,因为 each 可能包含空格。 语法

%~1

从参数中删除引号。

然后从字符串中删除 

.\

(如果存在)。请注意,如果任一参数包含

.\
,这可能会干扰意图
    

© www.soinside.com 2019 - 2024. All rights reserved.