命令行管道以匹配输出的第一行

时间:2018-10-14 01:32:22

标签: cmd

有没有一种方法可以通过使用管道的单个命令行命令来实现以下目标?

  1. 以修改日期的降序(dir / b / o:-d)列出文件
  2. 检查以上输出的第一行是否为“ checksum.txt”
  3. 如果存在匹配项,则输出“找到”,否则输出“未找到”

我试图通过重定向上面的“ dir”命令的输出,然后读取文件的第一行以检查是否匹配来避免创建临时文件。

1 个答案:

答案 0 :(得分:0)

这不是一行,但是通过循环dir命令的结果,它确实可以在没有临时文件的情况下工作。这将在批处理文件中起作用:

setlocal enableextensions
for /F %%s in ('dir /b /o:-d') do (
  if "%%s"=="mk.bat" echo found & goto :eof 
  echo not found & goto :eof
)

稍加用力,您也可以在一行上完成该操作:

cmd /e:on /c "@(for /F %s in ('dir /b /o:-d') do @(if "%s"=="mr.bat" echo found & exit /b) & @(echo not found & exit /b ))"

请注意一些区别:

  • 使用(更多)括号代替换行符对命令进行分组,
  • 请勿使用goto :eof,因为它在此设置中将不起作用,
  • 相反,使用exit /b退出脚本(也可以在上面的脚本中使用),
  • 将整个内容用双引号引起来,并将其传递给cmd,以防止退出当前的shell。使用/e:on,尽管您也可以使用setlocal enableextensions &启动命令,
  • 使用@禁止处理的子命令的额外输出。