2013-04-09 91 views
0

希望有人可以提供幫助。 我在DOS下工作(Windows 7中,如果它的事項),並得到了下面的代碼小片段:剔除部分路徑名

@ECHO OFF 

echo x:\junk\main\something\file1.txt  > temp.txt 
echo x:\junk\main\something\file2.txt  >> temp.txt 
echo x:\junk\main\else\file3.txt   >> temp.txt 

set TMP=temp.txt 

setlocal enabledelayedexpansion 

    for /F %%I IN (%TMP%) DO (
    echo File is: %%I 

    set CFile=%%I 
    set CFile=%CFile:~13% 
    echo File really is: %CFile% 
) 

運行此,產生以下結果:

C:\temp>test 
File is: x:\junk\main\something\file1.txt 
File really is: 
File is: x:\junk\main\something\file2.txt 
File really is: 
File is: x:\junk\main\else\file3.txt 
File really is: 

C:\temp> 

所以..我究竟做錯了什麼?爲什麼它不把值保存到CFile變量中? 它似乎有事情做與任FOR循環,或與%%我語法(而不是%I%),但我不知道爲什麼?

回答

0

您正在使用延遲命令行擴張,所以你需要在某些地方,而不是%!字符。

@ECHO OFF 

echo x:\junk\main\something\file1.txt  > temp.txt 
echo x:\junk\main\something\file2.txt  >> temp.txt 
echo x:\junk\main\else\file3.txt   >> temp.txt 

set TMP=temp.txt 

setlocal enabledelayedexpansion 

for /F %%I IN (%TMP%) DO (
    echo File is: %%I 

    set CFile=%%I 
    set CFile=!CFile:~13! 
    echo File really is: !CFile! 
    echo. 
    set CRealFile=%%~nxI 
    echo The filename is: !CRealFile! 
) 

雖然我不確定你是否真的想用!CFile:~13!。修改後的代碼上面已經不輸CFile價值,但它並不完全正確。我加了幾行來演示如何從%%I!CRealFile!提取的文件名。