Batch file 使用目录进行批处理文件脚本编写
这段代码显示了所有具有假字符串的文件,即使它们的扩展名不同。他们来自不同的目录,他们所有的目录都有一个SC文件夹(Success) 例如,如果我在命令行上回显路径/文件,这就是输出: 错误“C:\tester\test\test\waedsa.tmp”Batch file 使用目录进行批处理文件脚本编写,batch-file,Batch File,这段代码显示了所有具有假字符串的文件,即使它们的扩展名不同。他们来自不同的目录,他们所有的目录都有一个SC文件夹(Success) 例如,如果我在命令行上回显路径/文件,这就是输出: 错误“C:\tester\test\test\waedsa.tmp” 我想做的是获取所有这些错误文件,并将它们移动到各自目录上的SC文件夹中。解决方案比您当前的代码简单得多。不需要FINDSTR或管道。我使用find和replace测试@path是否包含排除的文件。我还假设该文件实际上是一个目录,因此@path\.
我想做的是获取所有这些错误文件,并将它们移动到各自目录上的SC文件夹中。解决方案比您当前的代码简单得多。不需要FINDSTR或管道。我使用find和replace测试@path是否包含排除的文件。我还假设该文件实际上是一个目录,因此
@path\..\
引用该文件的父目录。这并不明显,但这是有效的
请注意,这将尝试移动已在SC文件夹中的文件,但这将失败(一件好事),因为SC文件夹没有自己的SC文件夹。我将stderr重定向到NUL,以便隐藏预期的错误消息
FORFILES /p E:\test_folderpath\ /D -2 /S /C "cmd /c echo @isdir @path "|findstr "FALSE"|findstr /v "E:\test_folderpath\testtest\log"
或者您可以使用FIND(或FINDSTR)排除不需要的文件:
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"
如果您知道要排除的文件的确切名称(本例称之为log.txt),则更简单:
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"
根据您的
@path\..\
说明,我刚刚测试了cd“C:\Windows\System32”\..\
,它返回了C:\Windows
目录。这是一个很棒的技巧。我已经做了,而且它正在发挥作用。但我还有最后一个问题,我需要捕获路径或存储变量的路径。我需要存储@path\..\sc。因为,在我将文件移出到sc之前,我需要通过something.exe传递文件。something.exe将处理该文件,并为SC创建一个成功的文件。something.exe的参数是,启动“something.exe”E:\test\u folderpath\test(文件来自哪里)“E:\test\u folderpath\SC”(文件将发送到哪里)“E:\test\u folderpath\test”(原始目录)。所以我需要存储\..\scNo,您不需要将路径放入变量中。只需在FORFILES命令中调用“something.exe”。听起来你想那样做而不是搬家。
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"