2014-12-04 87 views
1

我有包含在一個可變的字符串,例如:批處理:如何解析包含文件系統路徑的字符串?

"C:\Users\SomeUser\Desktop\SomeFolder\File.jar" 

我想從該字符串轉換成另一個變量解析File.jar。我目前有一些與代碼工作:

FOR /f "tokens=1-6 Delims=\" %%A IN (%string%) DO (set myvariable=%%F) 

只要文件夾路徑保持相同的長度,這工作。不過,我希望能夠移動程序和文件,並仍然能夠正常工作。有沒有什麼辦法可以從右向左分析?任何建議將不勝感激。

回答

1

嘗試應用路徑改性劑如下:

set "inputPath=C:\Users\SomeUser\Desktop\SomeFolder\File.jar" 

for %%i in ("%inputPath%") do set fname=%%~nxi 

echo %fname% 

%%~nx<loop-var>提取的文件名根(n),並從循環變量文件擴展名(x);即它從循環變量的值中提取最後一個/文件名組件。
%%i被選爲在這種情況下,循環變量,但任何字母都行。)


P.S。:另一種常用的結構是%%~dp<param-or-loop-var->提取驅動的規範。 (d)和終止\p)的絕對路徑(無驅動器規格) - 這甚至適用於相對輸入路徑。
例如,%%~dp0將展開到批處理文件所在文件夾的絕對路徑。

A 所有支持的路徑修飾符列表here
(請注意,它們僅在參數中討論,但它們同樣適用於循環變量)。

+0

完美地工作。謝謝! – endrega 2014-12-04 05:55:36

+0

@endrega我的榮幸;聽到那個消息很開心;我已經添加了一些額外的信息和文檔鏈接。 – mklement0 2014-12-04 14:07:32

0

我想你可以改變腳本來處理所有使用*的令牌。而且,由於您使用每個標記的值來設置變量,因此最後一個標記將被分配給該變量。

FOR /f "tokens=* Delims=\" %%A IN (%string%) DO (set myvariable=%%F) 
相關問題