for命令的一些bug分析
更新時間:2008年08月29日 19:01:48 作者:
在使用批處理的過程中,會發(fā)現(xiàn)一些bug,下面就是一些會出現(xiàn)的情況
1、關(guān)于冒號:當(dāng)某行內(nèi)容以 : 打頭時,用 for /f "tokens=1* delims=:" %%i in ('findstr /n .* test.txt') do echo.%%j 會把 :
過濾掉;
2、關(guān)于分號:findstr .* test.txt 可以把以分號打頭的行完整顯示出來,但是,用在for語句中就不能找到了,必須加上參數(shù)/n才可以
,似乎是for語句會把以分號打頭的行當(dāng)作注釋內(nèi)容忽略掉,好象不是findstr的錯;而不放在for語句中的 type、more和findstr都是可以的;
解決問題1和問題2的方案有:
稍微復(fù)雜一點(diǎn)的:
@echo off
:: 不會忽略空行
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
call set "str=%%str:*:=%%"
call echo "%%str%%"
)
pause
最簡潔的:
@echo off
:: 此代碼會忽略空行
for /f "delims= eol=" %%i in (test.txt) do echo %%i
pause
3、在for擴(kuò)展中,%%~si 表示擴(kuò)充的路徑只含短文件名,但是在以下的測試過程中,卻發(fā)現(xiàn)真正的情況并非如此:
測試環(huán)境:
--------------------------------------------------------------------------------
D:\abcdefg hijk\abcd efgh.txt
D:\abcdefg hijk\te st.txt
測試代碼:
--------------------------------------------------------------------------------
@echo off
for /f "delims=" %%i in ('dir /a /b *.txt') do echo %%~si
pause
測試結(jié)果:
--------------------------------------------------------------------------------
D:\ABCDEF~1\ABCDEF~1.TXT
D:\ABCDEF~1\TEST~1.TXTtxt
看到測試結(jié)果的最后一條記錄了嗎?居然擴(kuò)展到了 TEST~1.TXTtxt !
總結(jié)了一下出錯的情形,似乎是這樣的:當(dāng)路徑中有超過一個的地方因?yàn)槟夸浢^11個字符而擴(kuò)充到短文件名的時候,文件名+后綴名
少于11個字符且?guī)Э崭竦奈募蜁l(fā)生擴(kuò)展錯誤。
過濾掉;
2、關(guān)于分號:findstr .* test.txt 可以把以分號打頭的行完整顯示出來,但是,用在for語句中就不能找到了,必須加上參數(shù)/n才可以
,似乎是for語句會把以分號打頭的行當(dāng)作注釋內(nèi)容忽略掉,好象不是findstr的錯;而不放在for語句中的 type、more和findstr都是可以的;
解決問題1和問題2的方案有:
稍微復(fù)雜一點(diǎn)的:
@echo off
:: 不會忽略空行
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
call set "str=%%str:*:=%%"
call echo "%%str%%"
)
pause
最簡潔的:
@echo off
:: 此代碼會忽略空行
for /f "delims= eol=" %%i in (test.txt) do echo %%i
pause
3、在for擴(kuò)展中,%%~si 表示擴(kuò)充的路徑只含短文件名,但是在以下的測試過程中,卻發(fā)現(xiàn)真正的情況并非如此:
測試環(huán)境:
--------------------------------------------------------------------------------
D:\abcdefg hijk\abcd efgh.txt
D:\abcdefg hijk\te st.txt
測試代碼:
--------------------------------------------------------------------------------
@echo off
for /f "delims=" %%i in ('dir /a /b *.txt') do echo %%~si
pause
測試結(jié)果:
--------------------------------------------------------------------------------
D:\ABCDEF~1\ABCDEF~1.TXT
D:\ABCDEF~1\TEST~1.TXTtxt
看到測試結(jié)果的最后一條記錄了嗎?居然擴(kuò)展到了 TEST~1.TXTtxt !
總結(jié)了一下出錯的情形,似乎是這樣的:當(dāng)路徑中有超過一個的地方因?yàn)槟夸浢^11個字符而擴(kuò)充到短文件名的時候,文件名+后綴名
少于11個字符且?guī)Э崭竦奈募蜁l(fā)生擴(kuò)展錯誤。
相關(guān)文章
bat批處理徹底隱藏文件的方法(使用虛擬磁盤實(shí)現(xiàn))
這篇文章主要介紹了bat批處理徹底隱藏文件的方法,本文使用創(chuàng)建虛擬磁盤的方法實(shí)現(xiàn),虛擬磁盤的盤符定為X盤,會出現(xiàn)在我的電腦中,使用時顯示,不用時隱藏2014-06-06用bat實(shí)現(xiàn)刪除系統(tǒng)腳本調(diào)試程序
用bat實(shí)現(xiàn)刪除系統(tǒng)腳本調(diào)試程序...2007-02-02判斷U盤已插入并自動COPY所有內(nèi)容的批處理-U盤自動復(fù)制
判斷U盤已插入并自動COPY所有內(nèi)容的批處理-U盤自動復(fù)制...2007-11-11批處理統(tǒng)計文件夾內(nèi)的所有文件的數(shù)量和總大小的bat
這篇文章主要介紹了批處理統(tǒng)計文件夾內(nèi)的所有文件的數(shù)量和總大小的bat,需要的朋友可以參考下2016-12-12