4

Windows マシン (win 7 または Win サーバー 2008 R2) には、いくつかの .config ファイルをバックアップ フォルダーにコピーするバッチ スクリプトがあります。
1 週間前に作成されたバックアップ ファイルを削除する別のスクリプトを作成したいと考えています。

使用方法に関する多くの提案がありますFORFILES(例として):

FORFILES /P "D:\Configs_Backup" /M *.config /D -7 /C "cmd /c del @file"

ただし、このコマンドでは「変更された」タイムスタンプが使用されますが、作成日を使用する必要があります。

サードパーティのプログラムをインストールせずに、コマンド コンソール経由でこれを実現できますか?

4

3 に答える 3

5

echoこれを試して、出力を見て、問題がなければ削除してください。

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET /a XDay=7
CALL :DateToJDN "%DATE%" JDNToday
FOR /r "D:\Configs_Backup" %%a IN (*.config) DO (
    FOR /f "tokens=1,4*" %%b IN ('dir /tc "%%~a"^|findstr "^[0-9]"') DO (
        CALL :DateToJDN "%%b" filedate
        SET /a diffdays=JDNToday-filedate
        IF !diffdays! gtr %XDay% ECHO DEL /F /Q "%%~a"
        )
    )
GOTO :eof

:DateToJDN "DD mm/dd/yyyy" jdn=
setlocal
set date=%~1
set /A yy=%date:~-4%, mm=1%date:~-10,2% %% 100, dd=1%date:~-7,2% %% 100
set /A a=mm-14, jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075
endlocal & set %2=%jdn%
exit /B

注: これはAM/PM時刻形式でのみ機能します。

于 2013-07-22T14:10:32.523 に答える
1

これが役立つかどうかを確認します - 5 つの *.config ファイル (skip=5) を最新の作成日で保持
します サンプル ファイルでテストします。

@echo off
pushd "d:\folder"
   del file2.tmp 2>nul
   for /f "delims=" %%a in ('dir *.config /b /a-d ') do call :getcreationdate "%%~fa"
   sort /r <file2.tmp >file.tmp
   for /f "skip=5 tokens=1,*" %%a in (file.tmp) do del "%%~b"
   del file.tmp file2.tmp 
popd
pause
goto :EOF

 :getcreationdate
 set "file=%~1"
 set "file=%file:\=\\%"
 WMIC DATAFILE WHERE name="%file%" get creationdate | find "." >file.tmp
 for /f %%b in (file.tmp) do set dt=%%b
 set dt=%dt:~0,8%_%dt:~8,6%
 del file.tmp
 >>file2.tmp echo %dt% "%~1"
于 2013-07-22T13:58:06.277 に答える
0

これは古い投稿であることは知っていますが、偶然見つけて助けになりました。私は@Grayがコメントとして示唆したルートに行き、.batコピースクリプトをこれに変更して、クリーンアップスクリプトで解決しようとするのではなく、コピー時に変更日を更新するようにしました。

copy %1 %2 /y
copy /b %2+,, %2

https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch

于 2021-03-29T16:26:27.830 に答える