由于使用了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:"='%"
答案 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'