我正在递归地浏览所有 JS 文件并缩小它们。但是,我必须完整保留一些 JS 文件。
我使用 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
接受开关(所有有效),但 -.
和 -j
(未知)被忽略。命令行很糟糕,因为在参数中找不到搜索字符串。
记录在案(
findstr /?
)的解决方案是使用 /c:"stringToMatch"
句法findstr /vile /c:"-min.js"
或者你可以使用转义符,所以
-
不作为选项参数初始字符处理findstr /vile "\-min.js"
关于batch-file - 当搜索字符串包含减号时 FINDSTR 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46237478/