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文件夹(成功)。
例如,如果我在命令行上回显路径/文件,则这是输出:
FALSE“C:\ tester \ test \ test \ waedsa.tmp”
我想要做的是获取所有这些FALSE文件并将它们移动到各自目录中的SC文件夹中。
答案 0 :(得分:1)
解决方案比您当前的代码简单得多。不需要FINDSTR或管道。我使用find和replace来测试@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"