2012-03-23 95 views
1

我試圖將for語句的變量設置爲另一個變量。當我這樣做時:將變量設置爲for語句中的另一個變量

for /f "tokens=* delims= " %%p in (plugins.txt) do set pp = %%p 

它工作正確。但我想做得更多,所以我以後做的(現在它不工作,這是爲什麼,我該如何解決呢

for /f "tokens=* delims= " %%p in (plugins.txt) do (
set pp = %%p 
echo %pp% 
echo %pp% 
echo %%p) 

編輯:?增加了輸入和期望的輸出

內容plugins.txt
http://subversion/svn/dotCMSPlugins/CustomLogin/trunk

希望的輸出
CustomLogin

+0

確定 – jeb 2012-03-23 10:34:27

+0

jeb的回答解決了主要問題。但是在分配變量時要小心多餘的空格。你可能想'設置pp = %% p'。你的代碼'set pp = %% p'有多餘的空格,所以變量名包含一個尾隨空格,並且該值有一個前導空格。 – dbenham 2012-03-23 11:44:05

+0

@dbenham:嗯,這是不是我說的一樣? :-) – jeb 2012-03-23 12:09:22

回答

3

該組雖然工作,但擴張以其他方式按預期工作。

擴展百分比將在解析括號塊的時刻完成,而不是在執行單個命令的時刻。 How does cmd.exe parse scripts

Btw。在set語句中使用空格不是一個好主意,因爲它會創建一個帶空格的變量,在您的情況下,set pp = %%p會創建一個名爲pp<space>的變量,其值爲<space><content of %%p

您可以通過使用延遲擴展來獲得所需的結果。

setlocal EnableDelayedExpansion 
for /f "tokens=* delims= " %%p in (plugins.txt) do (
    set "myVar=%%p" 
    set "myVar=!myVar:subversion/svn/dotCMSPlugins/=!" 
    set "myVar=!myVar:/trunk=!" 
    echo !myVar! 
) 
+0

啊,好吧,我明白了,但我現在該怎麼做!var! ?這是我想要做的,但不起作用.. set!myVar!=!myVar:http:// subversion/svn/dotCMSPlugins/=! – Gynnad 2012-03-23 10:42:41

+0

我在我的示例中添加了它。在set語句中只使用'myVar'作爲變量名,而不是'!myVar!'。 set的語法是'SET <變量名> = '或者'SET <變量名> = 「',第二種形式確保不在末尾追加不需要的空格。 – jeb 2012-03-23 10:47:40

+0

仍然無法正常工作,但我們正在接近!:)我想的是,這下面的句子分割字符串,所以我得到的最終答案:CustomLogin 顛覆/ SVN/dotCMSPlugins/CustomLogin /主幹/ 顛覆/ SVN/dotCMSPlugins/= /主幹/ = – Gynnad 2012-03-23 11:05:28

2

如果輸入文件包含此行:

subversion/svn/dotCMSPlugins/CustomLogin/trunk 

,並要得到這樣的結果:

CustomLogin 

那麼最簡單的方法是將線通過/令牌分開字符並以這種方式取第4個標記:

setlocal EnableDelayedExpansion 
for /F "tokens=4 delims=/" %%p in (plugins.txt) do (
    set "myVar=%%p" 
    echo !myVar! 
) 

如果FOR的目的只是爲了得到這樣的結果,那麼推遲擴張甚至沒有必要:您要刪除尾部的空格,與你的`delims = `你做

for /F "tokens=4 delims=/" %%p in (plugins.txt) do (
    set "myVar=%%p" 
) 
echo %myVar% 
+0

不錯的主意,與此令牌 – jeb 2012-03-25 07:13:36

+0

這是一個非常好的辦法解決這個問題是我想使用,只有一個問題,我需要這兩個,完整的URL和'第五令牌'。所以我認爲這是最好的方式:對於/ f「tokens = * delims =」%% p in(plugins.txt )do(設置「Var = %% p」 for/F「tokens = 5 delims = /」%% c in(%% p)do(set「myVar = %% c」)做一些動作)但他可以在第二個找到第五個標記爲 – Gynnad 2012-03-26 07:08:15

+0

@Gynnad:%% p必須用引號括起來,另外,我建議你使用「delims =」而不是「tokens = * delims =」來獲取整行('%% p「)中設置」var = %% p「for/F」tokens = 5 delims = /「%% p in(plugins.txt)do做(設置「myVar = %% c」)做一些行動)'' – Aacini 2012-03-26 18:36:42

相關問題