[英]How to pass string with double quotes as command line parameter to a batch file
[英]windows command line pass through quotes
我有一个命令想要传递到包含引号的批处理文件中。 我想要做的是将以下参数作为单个参数传递到bat文件中:
set parameter=-c myfirstparameter -p "also my first parameter"
C:\mybat.bat parameter
不幸的是,最终结果是:
%1 = -c
%2 = myfirstparameter
etc
我想要的是
%1 = -c myfirstparameter -p "also my first parameter"
你不能做你想做的。 在解析参数时,Batch使用[space],[逗号],[分号],[等于],[tab]和[0xFF]作为标记定界符。 如果要在参数值中使用标记定界符文字,则必须用引号引起来。 逃脱令牌定界符是不可能的。 因此,不可能有一个同时带有引号和未引号的令牌定界符文字的参数。
大概您问题中的最高代码是错误的。 为了获得您描述的结果,您必须具备
set parameter=-c myfirstparameter -p "also my first parameter"
C:\mybat.bat %parameter%
处理这种情况的最佳方法是通过引用传递参数,这需要对mybat.bat进行修改。
您必须启用延迟扩展并使用!%1!
,而不是通过%1
检索值!%1!
@echo off
setlocal enableDelayedExpansion
set "argument1=!%1!"
通过这种安排,您确实可以使用以下代码来调用脚本:
set parameter=-c myfirstparameter -p "also my first parameter"
C:\mybat.bat parameter
这是一个使用临时文件( 在此处找到 )传递参数的工作示例:
第一个BAT
echo -c myfirstparameter -p "also my first parameter">dummy.txt
second.bat
第二个BAT
set /p param=<dummy.txt
echo %param%
这是原始输出:
C:\temp\batchtest>first
echo -c myfirstparameter -p "also my first parameter" 1>dummy.txt
second.bat
set /p param= 0<dummy.txt
echo -c myfirstparameter -p "also my first parameter"
-c myfirstparameter -p "also my first parameter"
C:\temp\batchtest>
您需要引用该参数。 请在一个简单的测试.bat脚本中尝试这些。
echo %*
echo %1
echo %~1
set IT=%~1
echo %IT%
set IT=%*
echo %IT%
echo %IT:~1,-1%
c:> y.bat“ -p arf” asdfasdf asdfasdf“”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.