windows命令行传递引号

时间:2016-01-29 20:18:41

标签: windows batch-file cmd

我有一个命令要传递到包含引号的批处理文件中。我想要做的是将以下参数作为单个参数传递到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"

3 个答案:

答案 0 :(得分:3)

你无法做你想做的事。批处理参数时批处理使用[space],[逗号],[分号],[等于],[tab]和[0xFF]作为标记分隔符。如果要在参数值中包含标记分隔符文字,则必须引用分隔符。逃避令牌分隔符是不可能的。因此,不可能有一个同时包含带引号和不带引号的标记分隔符文字的参数。

大概你问题中的顶级代码是错误的。为了获得您描述的结果,您必须

set parameter=-c myfirstparameter -p "also my first parameter"
C:\mybat.bat %parameter%

处理这种情况的最佳方法是通过引用传递参数,这需要修改mybat.bat。

您必须启用延迟展开并使用%1

,而不是通过!%1!检索值
@echo off
setlocal enableDelayedExpansion
set "argument1=!%1!"

通过这样的安排,您确实可以使用以下内容来调用脚本:

set parameter=-c myfirstparameter -p "also my first parameter"
C:\mybat.bat parameter

答案 1 :(得分:1)

以下是使用临时文件(as found here)传递参数的工作示例:

<强> FIRST.BAT

echo -c myfirstparameter -p "also my first parameter">dummy.txt
second.bat

<强> SECOND.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>

答案 2 :(得分:-2)

您需要引用参数。请在一个简单的测试.bat脚本中尝试这些。

echo %*
echo %1
echo %~1
set IT=%~1
echo %IT%

set IT=%*
echo %IT%
echo %IT:~1,-1%

C:GT; y.bat&#34; -p arf&#34; asdfasdf asdfasdf&#34;&#34;