【发布时间】:2020-05-29 01:59:13
【问题描述】:
我是 Marvin,我想编写一个批处理文件(适用于 windows 命令提示符),它将删除特定文件夹中所有 7 天以上的文件夹,但基于文件名中写入的日期和不是文件的修改日期。
这是文件夹中文件的命名方式,它们都遵循这个特定的模板:CYYYYMMDDHHMMSS
提前感谢您的帮助。
对不起这个问题。我对创建批处理文件知之甚少。我尝试在与我关注的其他线程相关的其他线程上复制一些解决方案,但他们的问题是带有扩展名的文件删除。我担心的是使用我上面已经提到的文件名模板删除文件夹。
这是我基于文件夹名称格式和文件夹路径/位置的示例代码: 文件夹名称格式:CYYYYMMDDHHMMSS(例如 C20200527180716、C20200528123944) 文件夹路径:F:/v9Backup
@echo off
setlocal
set "folder=F:\v9backup"
REM set the number of days to substract
SET DAYS=7
REM Call function to check if the date is valid.
CALL :validdate "%days%" subdate
echo Older than: %subdate%
pushd "%folder%"
REM Get a list of the files
REM file pattern is: CYYYYMMDDHHMMSS
set "search=[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
FOR /F "tokens=1,2* delims=_" %%G IN ('dir /a-d /b C* 2^>nul ^|findstr /I /R /C:"^C%search%"') DO (
setlocal enabledelayedexpansion
set "fdate=%%H"
set "fdate=!fdate:~0,8!"
IF !fdate! lss %subdate% del "%%G_%%H_%%I"
endlocal
)
popd
pause
endlocal
GOTO :EOF
:validdate
setlocal
set "day=%~1"
set rand=%random%
md "%temp%\dummy%rand%\empty%rand%"
REM Get todays date
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do
set "dt=%%a"
REM set year month and day into its own variables.
set /a y=%dt:~0,4%
set /a m=1%dt:~4,2%
set /a d=1%dt:~6,2%
:loop
if "%day%"=="0" (
rd /s /q "%temp%\dummy%rand%"
endlocal &set "%~2=%y%%m:~-2%%d:~-2%"
GOTO :EOF
)
set /a d-=1
if %d% lss 101 (
set d=131
set /a m-=1
if %m% lss 101 (
set m=112
set /a y-=1
)
)
xcopy /d:%m:~-2%-%d:~-2%-%y% /t "%temp%\dummy%rand%\empty%rand%"
"%temp%\dummy%rand%" >nul 2>&1 && (set /a day-=1 & goto loop) || goto loop
GOTO :EOF
但是,它运行不正常。你能帮我解决这些问题吗?
【问题讨论】:
标签: batch-file