2017-09-15 128 views
2

我正在遞歸地瀏覽所有JS文件並縮小它們。不過,我必須保留一些JS文件。FINDSTR在搜索字符串包含減號字符時失敗

我已經使用for,dirfindstr的組合取得了很多成功。但是當我想忽略已經縮小的文件(以「-min.js」結尾的文件)時,FINDSTR命令破裂了。

這是我所用過的命令:

for /f %i in ('dir /b /a-d /s "D:\update" ^| findstr /liv "\admin" ^| findstr /ile ".js" ^| findstr /vile "-min.js" ^| findstr /vile ".min.js"') do echo %i 

隨着以下錯誤:

FINDSTR: /. ignored 
FINDSTR: /j ignored 
FINDSTR: Bad command line 
FINDSTR: Write error 
FINDSTR: Write error 
FINDSTR: Write error 
FINDSTR: Write error 

的問題肯定是與findstr /vile "-min.js"條款,但是我不知道爲什麼連字符是造成自從我使用/ l(文字)標誌以來,這是一個問題。

+1

嘗試處理' 「\ -min.js」'? – melpomene

回答

2

正在處理參數到findstr可執行文件的C運行庫遵循一組規則。其中一條規則是使用雙引號來保護單獨參數中的空格/特殊字符,但是,一旦命令行被標記並且標識了參數,在將單獨的參數傳遞給主代碼之前,將除去引號。

這意味着,這個命令

findstr /vile "-min.js" 

將在可執行處理作爲

argv[0] = findstr 
argv[1] = /vile 
argv[2] = -min.js 

和作爲findstr接受參數分組(如在/vile),但它也允許參數開始/--m,-i, -n, -s開關(全部有效)ar e被接受,但-.-j(未知)被忽略。

命令行不好,因爲在參數中找不到搜索字符串。

的記錄(findstr /?)解決方案是使用/c:"stringToMatch"語法

findstr /vile /c:"-min.js" 

或者你可以使用轉義字符,所以-是不是作爲一個選項參數初始字符

findstr /vile "\-min.js" 
+0

@dbenham,也許再包括一個例子。 –

相關問題