2017-09-25 68 views
0

我需要使用批處理腳本刪除特定文件夾中的文件,但是,我需要保留生成的最後一個文件。我們的服務器有一個保持生成日誌的IIS文件夾,我們需要始終保持最後一個,但刪除舊的。刪除文件夾中的文件但保留上次生成的文件

目前,我們有這樣的腳本,刪除一個特定文件夾中的所有文件(在這種情況下,所有的內部C中的文件:\ TEMP):我們如何可以編輯代碼保留最近

del /q "C:\Temp\*" 
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q 

文件夾中生成的文件?

非常感謝您的幫助。

+0

尋找最新的文件並刪除所有不是那個文件的文件? –

+0

你需要自己搜索,研究,編寫和嘗試代碼。發佈一個甚至沒有嘗試執行您需要的任務並要求添加的文件是一個直接的代碼請求,這裏的主題不在話下。 – Compo

+0

你說你想刪除文件,所以使用'rmdir'沒有意義,因爲它刪除目錄... – aschipfl

回答

0

此批處理文件提供了一個解決方案:

@echo off 
set "SourceFolder=C:\Temp" 
for /F "skip=1 delims=" %%I in ('dir "%SourceFolder%\*" /A-D /B /O-D 2^>nul') do del "%SourceFolder%\%%I" 
set "SourceFolder=" 

命令DIR輸出只是文件,因爲該選項的名稱/A-D(目錄條目與目錄屬性集)和/B的列表(裸格式)由於/O-D由最後修改日期反向排序,這意味着最先輸出最新修改文件的名稱。

通過錯誤輸出消息DIR如果指定的文件夾不包含任何文件被寫入重定向使用2>nul處理STDERR到設備NUL錯誤消息抑制。重定向運算符>在此處必須用脫字符^轉義,以便在Windows命令解釋程序處理整個命令行時將其解釋爲文字字符。稍後對於在後臺的單獨命令過程中執行命令dir "%SourceFolder%\*" /A-D /B /O-D 2>nul並捕獲寫入到STDOUT的輸出。

對於選項skip=1導致跳過第一行捕獲的輸出,這意味着忽略最新修改文件的文件名。

FOR選項delims=禁用默認分裂所捕獲的線的進入空間/製表符分隔的字符串作爲每整個文件名應該由FOR執行的命令被分配給循環變量I供使用。

DEL刪除文件,如果這是可能的。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • del /?
  • dir /?
  • echo /?
  • for /?
  • set /?

閱讀也是微軟文章關於Using Command Redirection Operators

相關問題