【问题标题】:How to check for a certain pattern in Windows batch如何在 Windows 批处理中检查特定模式
【发布时间】:2022-11-21 16:56:46
【问题描述】:

我想运行这样的东西

C:\> mybatch.bat somefile.gz

或者像这样

C:\> mybatch.bat somefile.mps.gz

在批处理中,我想检查参数是以.gz 还是.mps.gz 结尾的。

这行不通

if findstr ".mps.gz" %1 (
    echo ".mps.gz file"
) else (
    echo ".gz file"
)

这样做的正确方法是什么?

编辑 1(来自https://stackoverflow.com/users/2128947/magoo):

set ZIP="C:\Program Files\7-Zip\7zFM.exe"

echo %1|findstr /i /L /e /C:".mps.gz">nul&if errorlevel 1 ( 
    echo ".gz only %1"
    %ZIP% %1
) else (
    echo ".mps.gz %1"
    call freempsgz2lpt.bat %1
)

pause -1

如果我将批处理文件与扩展名 .gz 相关联并在 Windows 资源管理器中双击,则无法识别 .mps.gz 扩展名。从命令行运行良好。

编辑 2: 我将提案更改为

echo %1|findstr /i /L /e /C:".mps.gz""">nul&if errorlevel 1 ( ...

现在它适用于 Windows 资源管理器中的文件关联,但不适用于命令行。这对我来说没问题。

【问题讨论】:

  • echo %1|findstr /i /L /e /C:".mps.gz">nul&if errorlevel 1 (echo does not end .mps.gz) else (echo ends mps.gz)
  • 作品!我希望它看起来不像我的代码 sn-p 那样神秘和清晰,但这似乎无法通过 Windows 批处理 :-( ... 谢谢。请发布为解决方案以供我标记。

标签: windows batch-file pattern-matching


【解决方案1】:
 echo %~1|findstr /i /L /e /C:".mps.gz">nul&if errorlevel 1 (echo does not end .mps.gz) else (echo ends mps.gz)

findstr 是一个实用程序,如果字符串不匹配则设置 errorlevel = 1,如果匹配则设置为 0。

文档:提示中的findstr /?This tome或许多示例。

简而言之,/I 表示不区分大小写,/L 是文字匹配(不同于默认的/R - 部分正则表达式)/E 行尾匹配,/C:"stringtomatch"

【讨论】:

  • 也许我太快了。我编辑了问题。
  • 似乎您的方法将引用的文件名传递给批处理。添加 ~ 会去掉引号。
猜你喜欢
  • 1970-01-01
  • 2013-11-04
  • 2017-03-03
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多