2016-09-28 39 views
0

我有一個包含下列變量:Windows批處理:調用函數的每個路徑分隔字符串

"pdfList=D:\BundleManager\AssetPackageManager.unity;D:\BundleManager\AssetPackageManager.unity\.vs\AssetPackageManager.unity;D:\Crafting\CraftingExample.unity;D:\ResMan\FFResManExample.Unity;" 

我想呼籲每個分隔這些路徑的功能;我公司目前擁有的代碼是

for /F "delims=;" %%a in ("%pdfList%") do (@echo %%a) 

但這只是呼應以下

D:\BundleManager\AssetPackageManager.unity 

我試過設置tokens=*作爲一個選項,但是這只是回聲pdfList完成的價值;仍然存在。我哪裏錯了?

+2

嘗試'用於%%一個在(「%PD fList:; =「;」%「)do(@echo %%〜a)' – rojo

+0

是的,它看起來像它的作品,謝謝。如果你想添加一個答案而不是評論,並解釋發生了什麼,我會將其標記爲正確:) –

+1

較短:'echo%pdflist:; =&echo /%' – Aacini

回答

2

您的代碼存在的問題是for /F會逐行循環,而不是逐個令牌循環。更好的解決方案是使用for而不使用任何開關。 for將標記數據,拆分未加引號的空格,逗號,分號和製表符。

若要防止包含空格或逗號的路徑名被截斷,可以使用批處理變量子串替換來處理數據並用";"替換所有分號,然後用引號將整個事件包圍起來。 See this page瞭解子串替換的全部細節。

所以基本上,

a;b c;d e;f 

成爲

a";"b c";"d e";"f 

成爲

"a";"b c";"d e";"f" 

這是很容易符號化,和空格都被保留。這種原則運用到你的代碼上面:

@echo off & setlocal 

set "pdfList=D:\BundleManager\AssetPackageManager.unity;D:\BundleManager\AssetPackageManager.unity\.vs\AssetPackageManager.unity;D:\Crafting\CraftingExample.unity;D:\ResMan\FFResManExample.Unity" 

for %%a in ("%pdfList:;=";"%") do echo(%%~a 

輸出是現在:

d:\ BundleManager \ AssetPackageManager.unity
d:\ BundleManager \ AssetPackageManager.unity.vs \ AssetPackageManager.unity
d:\卡夫丁\ CraftingExample.unity
d:\ ResMan \ FFResManExample.Unity

+0

非常感謝:) –

+0

@RealWorld很高興我能幫忙! – rojo

相關問題