Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件等效于带引号的Unix参数扩展_Windows_Parameters_Batch File - Fatal编程技术网

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。