2012-07-11 94 views
2

假設我有文件名text.txt幷包含幾行。每行以dayname開始並以「/」字符結束,然後添加路徑。另一方面,我只需要文件名,而不是路徑。因此,我需要的東西,將文件從這樣轉換:如何在dos中刪除字符串之前的某個字符?

mon/C:\stt\test_file.abc 
sat/C:\Documents and Settings\alguri\Desktop\test_file2.txt 
fri/C:\sat\new_folder2\file3.jpg 

mon/test_file.abc 
sat/test_file2.txt 
fri/file3.jpg 

我需要在DOS命令這個代碼。我嘗試了一些代碼,但不能以不同的方式解析字符串。因爲路徑名可以有多個「\」字符。

如果我知道一行中只有兩個「\」字符,我可以這樣做:

for /f "tokens=1,4 delims=/\" %%a in (text.txt) do (
echo %%a 
    ) 

這將得到正確的答案僅是「test_file.abc」 但是,所有其他行有不同數量的「\」字符的行1。你認爲我可以如何處理這個問題?

我腦海中的一個解決方案是計算「\」的數量並設置令牌第二個參數來決定我需要哪個部分。但我可以做到這一點。除了令牌,價值可能不會像我想的那樣動態設置。

+0

DOS'for'不支持這種語法。 – 2012-07-11 13:42:34

+0

你的意思是動態設置令牌參數? – user1517831 2012-07-11 13:46:31

回答

3

您可以使用參數修飾符。

for /f "tokens=1,* delims=/" %%A in (test.txt) do (
    echo %%A/%%~nxB 
) 

有關修飾符的更多相關信息,你可以閱讀What does %~dp0 mean, and how does it work?

+1

+1,你這次擊敗了我:-) – dbenham 2012-07-11 13:47:22

+0

感謝它的工作我將檢查參數修飾符來理解行爲。 – user1517831 2012-07-11 13:49:34

相關問題