Windows 批处理文件等效于带引号的Unix参数扩展
关于Windows 批处理文件等效于带引号的Unix参数扩展,windows,parameters,batch-file,Windows,Parameters,Batch File,关于%*的批处理文件参数,已经有很多问题被询问和回答,但我还没有找到答案 批处理文件中是否有与Unix中的“$@”执行相同行为的等效语法 一些背景: @echo off set MYPATH=%~dp0 set PYTHON=%MYPATH%..\python\python set BASENAME=%~n0 set XTPY=%MYPATH%..\SGTools\bin\%BASENAME%.py "%PYTHON%" "%XTPY%" %* 这是用于代理调用Python脚本的.bat文件。
%*
的批处理文件参数,已经有很多问题被询问和回答,但我还没有找到答案
批处理文件中是否有与Unix中的“$@”执行相同行为的等效语法
一些背景:
@echo off
set MYPATH=%~dp0
set PYTHON=%MYPATH%..\python\python
set BASENAME=%~n0
set XTPY=%MYPATH%..\SGTools\bin\%BASENAME%.py
"%PYTHON%" "%XTPY%" %*
这是用于代理调用Python脚本的.bat文件。因此,我将所有参数(除了脚本名)传递给Python脚本。在引号中有参数和/或包含空格之前,此操作可以正常工作
在shell脚本中,可以使用“$@”获取每个参数并将其括在引号中。我能做些什么来复制这个过程吗
电话示例:
xt -T sg -t "path with possible spaces" -sum "name with spaces" -p <tool_name> -o lin32 lin64 win32 <lots of other options with possibilities of spaces>
xt-T sg-T“带可能空格的路径”-和“带空格的名称”-p-o lin32 lin64 win32
命令/file
xt
只包含上面列出的代码,因为实际的可执行文件是另一个文件夹中的Python代码。因此,关键是要创建一个自包含的包,在其中只向路径添加一个目录(xbin目录)。我不确定最干净的解决方案是什么,但下面是我如何解决这个问题的:
setlocal EnableDelayedExpansion
for %%i in (%*) do set _args= !_args! "%%~i"
echo %_args%
%\u args%现在将包含每个单独参数的引用列表。例如,如果按如下方式调用批处理文件:
MYBATFILE "test'1'file" "test'2'file" "test 3 file"`
echo%\u args%
将生成原始引用的输入
对于CMD文件,我需要使用不友好的文件名或目录名,并将它们传递给Cygwin Bash shell脚本来完成繁重的工作,但我无法承受在转换过程中丢失嵌入的单引号或空格
请注意%%i%中的~i,这是在应用引号之前删除引号所必需的。当传递包含空格的参数时(例如,上面的“test3文件”),CMD shell将已经对其应用了引号。此处的波浪号确保我们不会对包含空格的参数进行双引号引用。您指的是正在设置的环境变量还是
%*
的内容?你能举一些例子吗?@Keith_CE:你可以使用PowerShell来摆脱这些废话。@Sinan我指的是%*的内容。上面的示例和解释有助于理解吗?@John这将是一个很好的解决方案,但我不能在所有可能运行此功能的机器上安装Powershell。