batch-file - 当搜索字符串包含减号时 FINDSTR 失败

标签 batch-file command-line windows-8.1

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

我使用 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 (文字)标志。

最佳答案

处理 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/

相关文章:

node.js - 无法在 WIndows 中使用 npm

windows - Stream 3 句柄重定向导致输出溢出

windows - 如何在批处理脚本中隐藏 'net use' 命令错误消息

linux - 通过命令行 ubuntu 14.04 添加带有现有文本文件的新文本行

c# - WinRT 从视频流中提取帧

c# - 如何将屏幕截图上传到 Microsoft Store for Windows 8.1 Universal App

batch-file - 您可以从批处理文件向命令行历史记录添加条目吗?

windows - 使用单个批处理文件在不同的 cmd 提示符下执行多个批处理文件

c# - 如何在我的 C# 程序中获取由命令行扫描程序设置的 "ERRORLEVEL"变量?

linux - 检查媒体分辨率,如果分辨率大,则ffmpeg,如果输出小于原始值,则删除原始值,否则删除输出