【问题标题】:FINDSTR fails when the search string includes a minus character当搜索字符串包含减号时,FINDSTR 失败
【发布时间】:2021-12-15 00:08:20
【问题描述】:

我正在递归地浏览所有 JS 文件并缩小它们。但是我必须保留一些 JS 文件。

结合使用fordirfindstr,我取得了很大的成功。但是当我想忽略已经缩小的文件(以“-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(文字)标志。

【问题讨论】:

  • 试试"\-min.js"?

标签: batch-file command-line windows-8.1


【解决方案1】:

处理findstr 可执行文件的参数的C 运行时遵循一组规则。规则之一是使用双引号来保护单独参数内的空格/特殊字符,但是,一旦命令行被标记并识别参数,在将单独的参数传递给主代码之前,引号将被删除。

也就是说这个命令

findstr /vile "-min.js"

将在可执行文件中处理为

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

并且,因为findstr 接受参数分组(如在/vile 中),但它也允许以/--m-i-n、@ 开头的参数接受 987654331@ 开关(全部有效),但忽略 -.-j(未知)。

命令行不好,因为在参数中找不到搜索字符串。

记录在案的 (findstr /?) 解决方案是使用 /c:"stringToMatch" 语法

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

或者您可以使用转义字符,因此- 不会作为选项参数的初始字符处理

findstr /vile "\-min.js"

【讨论】:

  • @dbenham,也许还要包括一个案例。
【解决方案2】:

using escape characters or /c: 的替代方法,我发现如果您包含至少 1 个空格作为前缀, findstr 也可以与前导破折号配合使用(在不按字面意思搜索时不会影响匹配)。

findstr /vile " -min.js"

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多