是否可以使用批处理文件中的长路径变量并将它们合并起来,从而以这些较长的变量作为命令行参数来调用 EXE?如何操作?

是否可以使用批处理文件中的长路径变量并将它们合并起来,从而以这些较长的变量作为命令行参数来调用 EXE?如何操作?

是否可以使用批处理文件中的长路径变量来调用 EXE 并将这些变量作为命令行参数?如何操作?

  • 我读到我们可以在批处理文件中设置各种变量。

  • 此外,其中一些参数的路径确实很长。

  • 它们可以用作值以参数形式传递给该批处理文件中调用的 EXE 吗?

  • 我理解并在 PowerShell 脚本中看到过此类示例。可以使用批处理文件及其变量执行类似操作吗?

在尝试使 SET 命令和路径变量正常工作时遇到问题。

答案1

SET MYVAR="Hello World"
ECHO %MYVAR%

将 echo 替换为您想要的任何命令。
我建议您SET /?在命令提示符窗口中运行并仔细阅读输出。它将为您提供许多非常有用的附加信息。

答案2

是的,这是可能的,而且是更好的方法来编写 .BAT 批处理文件,以便于阅读和轻松更改值和参数。

发生了2个重大缺陷并已得到解决。

A)SET 命令中的空格导致问题

  • 等号必须紧跟在变量名后面。SET MYVAR="List.txt"

  • 摘自 Frank Thomas 在上面链接的 SET 文章,

    • https://ss64.com/nt/set.html

    • “变量名或字符串周围的任何多余空格都不会被忽略,与许多其他脚本语言不同,SET 不会容忍多余空格。”。因此,如果您输入 ln --list %MYVAR %(“R”后面的空格),您的命令可能会起作用,因为尾随空格成为变量名的一部分

B) 长路径中的“引号”需要我在其他地方找到的解决方案。

要有长路径,需要部分链接洞察力,因此从这里提取部分答案信息: https://stackoverflow.com/a/55951234/1937901

如果您需要用引号连接路径,则可以使用 = 替换变量中的引号。这不需要您知道路径是否已包含引号。如果没有引号,则不会发生任何变化。

@echo off
rem Paths to combine
set DIRECTORY="C:\Directory with spaces"
set FILENAME="sub directory\filename.txt"
echo %DIRECTORY%
echo %FILENAME%

rem This is just to illustrate how the = operator works
set DIR_WITHOUT_SPACES=%DIRECTORY:"=%
echo %DIR_WITHOUT_SPACES%

rem Combine two paths
set COMBINED="%DIRECTORY:"=%\%FILENAME:"=%"
echo %COMBINED%

使用上面的例子,利用 SET 创建并连接路径字符串,然后将其作为命令行参数推送到 ln.exe

SET FolA1="..文件夹子路径 1."
SET FolA2="..文件夹子路径 1."

设置 SrcRoot="C:\Users\用户名\AppData\Roaming\应用程序名称\Backups"

设置目标根目录="S:\HL_TEST\LN"

设置 DstCountFol="003--includedir--cp-bk"
设置目标日志=%目标日志计数:"=%_Log.txt

设置 DstPlus=%DstRoot:"=%\%DstCountFol:"=%

设置 SrcA1=%SrcRoot:"=%\%FolA1:"=%
设置 SrcA2=%SrcRoot:"=%\%FolA2:"=%

设置 DstA1=%DstRoot:"=%\%DstCountFol:"=%\%FolA1:"=%
设置 DstA2=%DstRoot:"=%\%DstCountFol:"=%\%FolA2:"=%

回显 %SrcA1%
回显 %SrcA2%

回显 %DstA1%
回显 %DstA2%

回音开启  

ln --progress --json --output %DstLog% --source %SrcA2% --destination %DstA2% --backup --copy %SrcA1% %DstA1%  

这是批处理文件中 LN.exe 的最终命令行,以较长路径变量作为参数调用。

答案3

rem from another variable
set "add_path=C:\food\foo bar"
set "path=%add_path%;%path%"

rem ..mode simple append to path
set "path=C:\food\foo bar;%path%"

也可以看看https://ss64.com/nt/set.html了解更多信息

相关内容