【问题标题】:Writing a batch file program using wildcards使用通配符编写批处理文件程序
【发布时间】:2020-07-12 11:15:27
【问题描述】:

编写一个名为 EX4.BAT 的批处理程序,它列出了在 C: 驱动器的根目录及其子目录中符合以下任何条件的所有文件:

a) 扩展名为 .COM 且文件名中有 4 个字母的文件。例如chcp.commode.com

b) .EXE 第二个字母为 I 的文件,例如 WINHELP.EXE DIAGS.EXE 等。

确保输出不会太快向上滚动屏幕。 在 a) 和 b) 部分之间放置 pause 命令

我尝试了以下方法:

cd\ Rem  to return to the root folder of C
dir ????.com /b/s Rem  COM files with 4 letters
pause Rem to pause the screen
dir ?I*.exe /s Rem  search EXE files whose 2nd letter is I 

对于 a) 部分,这样做也接受数字,我必须确保它只接受字母。我尝试使用正则表达式,但没有成功。

【问题讨论】:

  • 旁注:您不能像这样将rem 放在同一行。您可以使用& rem 或使用其他一些技巧explained here,例如%= my comment =%
  • 提示1:通配符? 表示“零个或一个字符”,所以x.com 也会被列出。提示2:dir 无法区分字母和数字。您需要过滤输出(请参阅findstr /?)提示3:请参阅dir /? 并注意/p 参数。
  • 确保输出不会太快向上滚动屏幕。试试ss64.com/nt/more.html,类似dir ?I*.exe /s | more
  • @JosefZ: dir /p 也是如此。
  • 我建议,如果您的问题是“文件名中的 4 个字母”,它表示字符,而不是专门的字母字符!

标签: windows batch-file wildcard


【解决方案1】:

这是执行问题中列出的任务的一种方法的基本示例,没有在评论区要求的澄清。

@Echo Off
Setlocal EnableExtensions
Set "PATHEXT="
(   "%__APPDIR__%where.exe" /R C:\ ????.com |^
     "%__APPDIR__%findstr.exe" /E /I /R "\\[a-Z]*\.com"
    Echo(
    Echo Press any key to continue . . .
    Pause 1> NUL
    "%__APPDIR__%where.exe" /R C:\ ?I*.exe
) 2> NUL | "%__APPDIR__%more.com"
EndLocal
Pause

由于这显然是“家庭作业”,我不会对我使用过的命令或我这样做的原因提供任何解释,我也不会调整我的代码以适应以后的添加或更改任务。同样重要的是要记住,因为这在技术上是其他人的提交,所以除非您完全理解它的工作原理和原因,否则您不得展示它。

【讨论】:

    最近更新 更多