for的一些bug

2018-11-06 10:32 更新


  1、關(guān)于冒號(hào):當(dāng)某行內(nèi)容以 : 打頭時(shí),用 for /f "tokens=1* delims=:" %%i in ('findstr /n .* test.txt') do echo.%%j 會(huì)把 : 過濾掉;


  2、關(guān)于分號(hào):findstr .* test.txt 可以把以分號(hào)打頭的行完整顯示出來,但是,用在for語句中就不能找到了,必須加上參數(shù)/n才可以,似乎是for語句會(huì)把以分號(hào)打頭的行當(dāng)作注釋內(nèi)容忽略掉,好象不是findstr的錯(cuò);而不放在for語句中的 type、more和findstr都是可以的;


  解決問題1和問題2的方案有:


稍微復(fù)雜一點(diǎn)的:


@echo off

:: 不會(huì)忽略空行

for /f "delims=" %%i in ('findstr /n .* test.txt') do (

    set "str=%%i"

    call set "str=%%str:*:=%%"

    call echo "%%str%%"

)

pause


最簡(jiǎn)潔的:


@echo off

:: 此代碼會(huì)忽略空行

for /f "delims= eol=" %%i in (test.txt) do echo %%i

pause



  3、在for擴(kuò)展中,%%~si 表示擴(kuò)充的路徑只含短文件名,但是在以下的測(cè)試過程中,卻發(fā)現(xiàn)真正的情況并非如此:


  測(cè)試環(huán)境:

--------------------------------------------------------------------------------

D:\abcdefg hijk\abcd efgh.txt

D:\abcdefg hijk\te st.txt


  測(cè)試代碼:

--------------------------------------------------------------------------------

@echo off

for /f "delims=" %%i in ('dir /a /b *.txt') do echo %%~si

pause


  測(cè)試結(jié)果:

--------------------------------------------------------------------------------

D:\ABCDEF~1\ABCDEF~1.TXT

D:\ABCDEF~1\TEST~1.TXTtxt


  看到測(cè)試結(jié)果的最后一條記錄了嗎?居然擴(kuò)展到了 TEST~1.TXTtxt !


  總結(jié)了一下出錯(cuò)的情形,似乎是這樣的:當(dāng)路徑中有超過一個(gè)的地方因?yàn)槟夸浢^11個(gè)字符而擴(kuò)充到短文件名的時(shí)候,文件名+后綴名 少于11個(gè)字符且?guī)Э崭竦奈募蜁?huì)發(fā)生擴(kuò)展錯(cuò)誤。


                                                           —— namejm


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)