2015-07-10 202 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