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