确定bat变量中的引号(及其类型)

时间:2013-12-12 09:59:55

标签: batch-file cmd

由于使用了bat / cmd文件中的一些bash.exe调用,我需要将一些变量单引号,其中一些 - 双引号。我正在将一些格式转换为另一种格式。是否有可能使它更具普遍性:确定引号的类型并为需要它的人加上双引号,否则将它们单引号?

所以我们可以有3种类型的输入参数:

set SOURCE="C:\SRC"
set SOURCE='C:\SRC'
set SOURCE=C:\SRC

我需要确定输入类型并将其转换为以下两种形式:

SOURCE="C:\SRC"
SOURCE='C:\SRC'


rem -----------------------------------------------
rem      Converting SOURCE in
rem  single quoted format, very important to pass
rem  parameters to bash.exe!
rem -----------------------------------------------
set "SOURCE_CYG=%SOURCE:"='%"

2 个答案:

答案 0 :(得分:1)

:unquote Batch子例程,在下面的代码末尾,从变量中删除任何引用,因此您可以以任何方式管理它:

@echo off
setlocal EnableDelayedExpansion

set SOURCE="C:\SRC"
echo Original: %SOURCE%
call :unquote SOURCE
echo Double quotes: "%SOURCE%", single quotes: '%SOURCE%'
echo/

set SOURCE='C:\SRC'
echo Original: %SOURCE%
call :unquote SOURCE
echo Double quotes: "%SOURCE%", single quotes: '%SOURCE%'
echo/

set SOURCE=C:\SRC
echo Original: %SOURCE%
call :unquote SOURCE
echo Double quotes: "%SOURCE%", single quotes: '%SOURCE%'
echo/

goto :EOF

:unquote var
set quote="
if "!%1:~0,1!" equ "!quote!" set %1=!%1:~1,-1!
if "!%1:~0,1!" equ "'" set %1=!%1:~1,-1!
exit /B

答案 1 :(得分:0)

如果所有问题都是您的示例代码所显示的内容,那么这很简单。不要在变量中使用引号。假设变量中没有引号,并将所需的引号放在代码中的正确位置。

来自批次代码:

set "testVariable=this is a test"
bash test.sh

在test.sh

echo $testVariable
echo "$testVariable"
echo '$testVariable'
echo ----------------------
for a in $testVariable
do
    echo $a
done
echo ----------------------
for a in "$testVariable"
do
    echo $a
done
echo ----------------------
echo "'"$testVariable"'"
testVariable="'"$testVariable"'"
echo $testVariable
exit

此输出

this is a test
this is a test
$testVariable
----------------------
this
is
a
test
----------------------
this is a test
----------------------
'this is a test'
'this is a test'