命令行循环对目录中的所有文件运行命令(如果可能,加上子目录)

Rob*_*ert 17 windows command-line imagemagick

我假设这很容易做到,但我对 Windows 的命令行实用程序的经验为零。基本上,我需要遍历目录中的所有文件(如果它可以创建子目录就太好了,但如果需要,我可以在 5 个目录中的每一个目录上运行它),获取名称作为变量,并让它运行

"C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
   -colorspace Gray -colors 32 file_var file_var
Run Code Online (Sandbox Code Playgroud)

在命令提示符中看到Dynamically name files for loop。我可以使用它吗(用上面的命令交换 SET...)?有问题的计算机上的空间超出限制,因此在此阶段我无法在运行此之前执行备份(不好,我知道)。

Rob*_*ert 17

奇怪的是,有一个带有递归部分的响应。

好吧,根据How to Loop Through Files Matching Wildcard in Batch File,我能够实现这一点。这是它的执行方式:

 cd path_to_root
 for /R %%f in (*.tif) do (
 "C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
    -colorspace Gray -colors 32 "%%f" "%%f"
 )
Run Code Online (Sandbox Code Playgroud)

  • 如果从命令行运行(而不是批处理文件),请将每个“%%f”替换为“%f” (3认同)

小智 9

打开 PowerShell

$files = Get-ChildItem -Recurse 
foreach ($file in $files){
    c:\windows\System32\notepad.exe $file.FullName
}
Run Code Online (Sandbox Code Playgroud)

Get-ChildItem 从当前子目录中检索作为对象的文件列表。“-recurse”将包括子目录。这会将它放入一个数组 $Files 中。

foreach 循环遍历每个文件,并使用每个文件的完整文件名路径的命令行参数调用记事本。

注意:在包含几个小文本文件的目录中测试上述代码,因为它将为每个文件打开一个记事本实例。

这应该让你知道如何去做你想做的事情。