Batch file 使用目录进行批处理文件脚本编写

Batch file 使用目录进行批处理文件脚本编写,batch-file,Batch File,这段代码显示了所有具有假字符串的文件,即使它们的扩展名不同。他们来自不同的目录,他们所有的目录都有一个SC文件夹(Success) 例如,如果我在命令行上回显路径/文件,这就是输出: 错误“C:\tester\test\test\waedsa.tmp” 我想做的是获取所有这些错误文件,并将它们移动到各自目录上的SC文件夹中。解决方案比您当前的代码简单得多。不需要FINDSTR或管道。我使用find和replace测试@path是否包含排除的文件。我还假设该文件实际上是一个目录,因此@path\.

这段代码显示了所有具有假字符串的文件,即使它们的扩展名不同。他们来自不同的目录,他们所有的目录都有一个SC文件夹(Success)

例如,如果我在命令行上回显路径/文件,这就是输出:

错误“C:\tester\test\test\waedsa.tmp”


我想做的是获取所有这些错误文件,并将它们移动到各自目录上的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"