2013-12-12 81 views
0

由於使用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

很難回答,因爲您沒有顯示任何相關的代碼 – jeb

+0

單引號變量裏面帶雙引號怎麼辦?反之亦然。並且,逃脫單\雙引號?單引號字符串中的反引號字符串中的單引號字符串?希望是錯的,但似乎「普遍」有很多案例。正如jeb所說,需要更多的編碼。 –

+0

更新的信息/代碼 –

回答

1

:unquote批次子程序,在低於代碼結束時,除去任何引用從變量,所以你可以用你想要的任何方式來管理它:

@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 
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' 
+0

我在問windows批處理文件,而不是一個。 –

+0

@AntonKochkov:是的,重點不是在變量內部使用引號,而是在需要的地方將它們放在代碼中。包含的示例僅僅是值的正確傳遞/解釋。 –

+0

他們是環境變量,所以我需要像現在這樣處理它們。 –