2017-09-15 208 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,也许再包括一个例子。 –

相关问题