使用目录播放的批处理文件脚本

Batch file scripting playing with the directories

FORFILES /p E:\test_folderpath\ /D -2 /S /C "cmd /c echo @isdir @path "|findstr "FALSE"|findstr /v "E:\test_folderpath\testtest\log" 

此代码显示所有具有 FALSE 字符串的文件,即使它们的扩展名不同。它们来自不同的目录,并且它们的所有目录都有一个 SC 文件夹(成功)。

例如,如果我在命令行上回显 path/file,则输出为:

错误"C:\tester\test\test\waedsa.tmp"

我想要做的是获取所有这些 FALSE 文件并将它们移动到各自目录的 SC 文件夹中。

解决方案比您当前的代码简单得多。不需要 FINDSTR 或管道。我使用查找和替换来测试@path 是否包含排除的文件。我也假装文件其实是一个目录,这样@path\..\就是指文件的父目录。这不是很明显,但是这个有效!

请注意,这将尝试移动已经在 SC 文件夹中的文件,但这会失败(这是件好事),因为 SC 文件夹没有自己的 SC 文件夹。我将 stderr 重定向到 NUL,因此隐藏了预期的错误消息。

forfiles /p E:\test_folderpath\ /d -2 /s /c "cmd /v:on /c set "file=@path"&if @isdir==FALSE if !file:E:\test_folderpath\testtest\log=! neq !file! move /y @path @path\..\sc >nul 2>nul"


或者您可以使用 FIND(或 FINDSTR)来排除不需要的文件:

forfiles /p E:\test_folderpath\ /d -2 /s /c "cmd /c if @isdir==FALSE echo @path|find /i "E:\test_folderpath\testtest\log" >nul || move /y @path @path\..\sc >nul 2>nul"


如果您知道要排除的文件的确切名称(在本例中称为 log.txt),则更简单:

forfiles /p E:\test_folderpath\ /d -2 /s /c "cmd /c if @isdir==FALSE if /i @path neq "E:\test_folderpath\testtest\log.txt"  move /y @path @path\..\sc >nul 2>nul"