2013-11-24 31 views
0

我運行此命令,我不明白爲什麼它不會工作的命令來設置一個變量不起作用

setlocal EnableDelayedExpansion 

for %%a in (harry-boy) do set %%a:-== 

echo %harry% 

pause 

這是結果我得到 -

e:\6\1>setlocal EnableDelayedExpansion 

e:\6\1>for %a in (harry-boy) do set %a:-== 

e:\6\1>set harry-boy:-== 

e:\6\1>echo 
ECHO is on. 

e:\6\1>pause 
Press any key to continue . . . 

我將連字符號改爲等號,然後在其上運行set命令。我期望看到變量「哈里」=「男孩」?

下面是一個簡單的測試 -

set file=play=here.mkv 
set %file:==-% 
echo %file% 
pause 

,我得到這個 -

set file=play=here.mkv 
==-% 
was unexpected at this time. 

set %file:==-% 

我想我會得到文件=播放here.mkv的新內容。好吧,我看到這使得語法錯誤,set命令停止。那麼如何將=改爲連字符?

+0

你的語法是錯誤的命令集和你不能使用循環變量名那樣。它必須是一個變量名稱。 – foxidrive

+1

您已添加更多信息 - 替換功能無法替代「=」符號。 – foxidrive

回答

0

易soloution:

for /f "tokens=1,2 delims=-" %%a in ("harry-boy") do set %%a=%%b 
Echo %harry% 

,並應爲你做你的工作。但它只能在報價中使用一個-

+0

它會與更多的'''''你寫'代幣= 1,*'而不是'代幣= 1,2'('%% b'將是一個字符串包含該行的其餘部分) – Stephan

0

SET會將第一個=右側的值分配給左側命名的環境變量。

因此,在兩種情況下,您都應將=的值分配給名爲harry-boy:-的變量。

你可以通過執行

set harr 

這將顯示任何變量開始驗證這個harr

1

的字符串替換格式:

%var:old-string=new-string% 

不上for替換參數工作,只是在批量變量。您例如等效方式,使用變量,而不是,應該是:

set a=harry-boy 
set %a:-==% 
echo %harry% 
pause 

輸出:

C:>set a=harry-boy 
C:>set harry=boy 
C:>echo boy 
boy 
C:>pause 
Press any key to continue . . . 
+0

是的,這使得完美的感覺。我正在嘗試一些基本的東西,比如你的測試,我不能看到錯誤盯着它。看看我原來的帖子。 – tyee