2015-07-10 182 views
1

我只是进入蝙蝠文件。 我试图删除网络共享驱动器上的旧文件夹,但按名称跳过2个包含的文件夹。 基本上我需要每天制作的所有文件,并始终保留2个旧文件。这会删除超过3天以上的所有文件批处理文件(ForFiles逻辑的多个条件命令)?

代码:

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

我想是这样的:如果没有@FNAME ==%名称%。我不完全理解这个过程,我能在forFiles中有两个条件吗?我以前必须拥有/ c吗?

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

我似乎无法得到它,你会介意帮助我吗? 谢谢!

+0

就像我对批处理文件怀旧,他们出现了自DOS时代,他们是非常有限的。考虑切换到PowerShell。它是一种功能全面的语言,可以与几乎所有的操作系​​统进行交互,如果您愿意,甚至可以编译自定义模块。另外,随着批处理文件变得越来越不重要,它有更多有用的知识。 – Basic

回答

0

是的,嵌套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\SO\31346676.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 
+0

我真的很感激!它对我有效,但有一个问题。我在做什么原因是错误的: 'if NOT @FNAME ==%name%' – i773

1

这是一个有点混乱,但我能做到这一点上的本地目录:

@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 
+0

非常感谢!但我正在处理20Gb文件,我无法复制,我只是在寻找多种条件。 – i773