主頁(yè) > 知識(shí)庫(kù) > for命令的一些bug分析

for命令的一些bug分析

熱門(mén)標(biāo)簽:鐵路電話系統(tǒng) 美圖手機(jī) 網(wǎng)站文章發(fā)布 智能手機(jī) 銀行業(yè)務(wù) 檢查注冊(cè)表項(xiàng) 服務(wù)器配置 呼叫中心市場(chǎng)需求
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ì)把 :
過(guò)濾掉;

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

  解決問(wèn)題1和問(wèn)題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è)試過(guò)程中,卻發(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)路徑中有超過(guò)一個(gè)的地方因?yàn)槟夸浢^(guò)11個(gè)字符而擴(kuò)充到短文件名的時(shí)候,文件名+后綴名
少于11個(gè)字符且?guī)Э崭竦奈募蜁?huì)發(fā)生擴(kuò)展錯(cuò)誤。

標(biāo)簽:河南 滄州 新疆 沈陽(yáng) 樂(lè)山 上海 長(zhǎng)治 紅河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《for命令的一些bug分析》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266