批处理文件(ForFiles 逻辑的多个条件命令)?

Batch file (ForFiles multiple conditional commands for logic)?

我刚刚进入 Bat 文件。 我正在尝试删除网络共享驱动器上的旧文件夹,但按名称跳过了其中的 2 个文件夹。 基本上我需要我每天制作的所有文件并始终保留 2 个旧文件。

删除所有超过 3 天的文件的代码:

PushD "\****-****\build" &&(
ForFiles /D -3 /C "CMD /C if @ISDIR==TRUE  echo RD @FILE &RD /S @FILE
 ) & PopD

我在想这样的事情:if NOT @FNAME == %name%。我不完全理解这个过程,我可以在 forFiles 中有两个条件吗?我之前必须有 /c 吗?

PushD "\****-****\build" &&(
ForFiles /D -3 /C "CMD /C if NOT @FNAME == %name% if @ISDIR==TRUE  echo RD @FILE &RD /S @FILE
 ) & PopD

我好像不明白,你介意帮帮我吗? 谢谢!

有点乱,但我可以在本地目录上完成:

 @echo off

mkdir Temp\Temp

REM Copy all old file to Temp dir
forfiles -p "%cd%"  -m *.* /D -2 /C "cmd /c xcopy @path %cd%\Temp"

REM copy a random file from Temp dir to Temp/Temp dir and then delete it
FOR %%A in (%cd%\Temp\*) do (
   COPY "%%A"  %cd%\Temp\Temp\
   DEL "%%A"
   GOTO :Second
)
:Second

Rem copy second random file from Temp dir
FOR %%A in (%cd%\Temp\*) do (
   COPY "%%A"  %cd%\Temp\Temp\
   GOTO :Del
)
:Del

Rem delete all old files from local dir
forfiles -p "%cd%"  -m *.* /D -2 /C "cmd /c del @path"

Rem Copy back two random old files to local dir
xcopy %cd%\Temp\Temp\* %cd%

Rem remove Temp dir
rmdir /s /q Temp

是的,在它们的 then 分支中嵌套 if 命令是具有逻辑 AND 的方法。请注意下一个代码片段中的正确引用:

@ECHO ON >NUL
@SETLOCAL enableextensions
set "name=SO"
set "nam2=SU"
pushd "D:\VB_scripts"
@rem all directories 
ForFiles /D -2 /C "CMD /C if @ISDIR==TRUE echo @FILE"
@rem all directories except "SO" 
ForFiles /D -2 /C "CMD /C if @ISDIR==TRUE if not @FNAME=="""%name%""" echo @FILE"
@rem all directories except "SO" and "SU" 
ForFiles /D -2 /C "CMD /C if @ISDIR==TRUE if not @FNAME=="""%name%""" if not @FNAME=="""%nam2%""" echo @FILE"
popd
@ENDLOCAL

输出:

==>D:\bat\SO346676.bat

==>set "name=SO"

==>set "nam2=SU"

==>pushd "D:\VB_scripts"

==>ForFiles /D -2 /C "CMD /C if @ISDIR==TRUE echo @FILE"

"Class Pack"
"Oldies"
"SO"
"SU"
"WMI"

==>ForFiles /D -2 /C "CMD /C if @ISDIR==TRUE if not @FNAME=="""SO""" echo @FILE"

"Class Pack"
"Oldies"
"SU"
"WMI"

==>ForFiles /D -2 /C "CMD /C if @ISDIR==TRUE if not @FNAME=="""SO""" if not @FNAME=="
""SU""" echo @FILE"

"Class Pack"
"Oldies"
"WMI"

==>popd