当搜索字符串包含减号时 FINDSTR 失败
FINDSTR fails when the search string includes a minus character
我正在递归地检查所有 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 运行时遵循一组规则。规则之一是使用双引号来保护单独参数中的 spaces/special 个字符,但是,一旦命令行被标记化并且参数被识别,引号就会在将单独的参数传递给主代码之前被删除。
也就是说这个命令
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"
的替代方法,我发现 findstr 也可以与前导破折号配合使用,前提是您至少包含 1 个 space 作为前缀(不按字面搜索时不会影响匹配)。
findstr /vile " -min.js"
我正在递归地检查所有 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 运行时遵循一组规则。规则之一是使用双引号来保护单独参数中的 spaces/special 个字符,但是,一旦命令行被标记化并且参数被识别,引号就会在将单独的参数传递给主代码之前被删除。
也就是说这个命令
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"
findstr /vile " -min.js"