FINDSTR在搜索字符串包含减号字符时失败
问题描述:
我正在递归地浏览所有JS文件并缩小它们。不过,我必须保留一些JS文件。FINDSTR在搜索字符串包含减号字符时失败
我已经使用for
,dir
和findstr
的组合取得了很多成功。但是当我想忽略已经缩小的文件(以“-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(文字)标志以来,这是一个问题。
答
正在处理参数到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,也许再包括一个例子。 –
尝试处理' “\ -min.js”'? – melpomene