删除目录下3天前的文件,但是保留名字为STAN04.LOG,STAN05.LOG,STAN06.LOG的文件的bat脚本
时间: 2023-09-26 15:06:48 浏览: 79
### 回答1:
在 Windows 中,可以使用以下 bat 脚本删除目录下 3 天前的文件,但保留名字为 STAN04.LOG,STAN05.LOG,STAN06.LOG 的文件:
@echo off
forfiles /p "C:\目录路径" /s /m *.* /c "cmd /c if @fname!='STAN04.LOG' if @fname!='STAN05.LOG' if @fname!='STAN06.LOG' if @isdir==FALSE if @ctime<=3 days del @path"
echo 已删除目录下3天前的文件,但保留名字为STAN04.LOG,STAN05.LOG,STAN06.LOG的文件
pause
注意:
- 请替换 "C:\目录路径" 为目标目录的路径。
- 如果要保留文件夹,请将 /s 参数替换为 /d。
希望这个脚本能帮到你!
### 回答2:
以下是一个能实现删除目录下3天前的文件,但保留名字为STAN04.LOG、STAN05.LOG和STAN06.LOG的文件的bat脚本:
```
@echo off
setlocal
set "directory=C:\目录路径" // 将"目录路径"替换为实际的目录路径
for /f "usebackq delims=" %%a in (`dir /b /a-d /o-d "%directory%"`) do (
set "file=%%a"
if not "!file!"=="STAN04.LOG" (
if not "!file!"=="STAN05.LOG" (
if not "!file!"=="STAN06.LOG" (
forfiles /p "%directory%" /m "%%a" /d -3 /c "cmd /c del @path" // 删除3天前的文件
)
)
)
)
endlocal
```
这个脚本使用了`for /f`循环来遍历目录下的文件,并使用`dir`命令按文件修改日期降序列出目录中的所有文件,然后使用`forfiles`命令来删除3天前的文件。
脚本中的`set "directory=C:\目录路径"`行是用来设置目录路径变量的,需要将其中的"C:\目录路径"替换为实际的目录路径。
脚本会逐个检查每个文件名,并确定是否需要保留或删除它们。在这个例子中,脚本将保留名字为STAN04.LOG、STAN05.LOG和STAN06.LOG的文件,而删除其他所有3天前的文件。
请注意,在运行脚本之前,请务必备份您的文件,以防止意外删除。
### 回答3:
可以使用以下的bat脚本来实现删除目录下3天前的文件,但是保留名字为STAN04.LOG,STAN05.LOG,STAN06.LOG的文件:
```
@echo off
setlocal
REM 设置目录路径和保留的文件名
set "directory=C:\path\to\your\directory"
set "keep_filenames=STAN04.LOG STAN05.LOG STAN06.LOG"
REM 获取当前日期
for /f "usebackq delims=" %%a in (`%__AppDir__%cmd.exe /c %__AppDir__%robocopy.exe /njh /njs /ndl /nc /ns /np /l "%~dp0." . . ^| %__AppDir__%findstr.exe "^[0-9]"`) do set "date=%%a"
REM 计算3天前的日期
for /f "tokens=1-3 delims=/ " %%a in ("%date%") do (
set /a "yy=10000%%a %% 10000, mm=100%%b %% 100, dd=100%%c %% 100"
set /a "yy=yy, mm=(mm + 100 - 3) %% 100, yy=yy + (mm ^%% 10000 - mm) / ^%% 10000 - 1, mm=mm %% 100"
)
REM 删除目录下3天前的文件,但保留指定的文件
for /f "usebackq delims=" %%F in (`dir "%directory%" /a:-d /b /s ^| findstr /v /i /r "\b%keep_filenames%\>"`) do (
for /f "tokens=1-3 delims=/ " %%a in ("%%~tF") do (
set /a "file_yy=10000%%a %% 10000, file_mm=100%%b %% 100, file_dd=100%%c %% 100"
if /i "!file_yy!_!file_mm!_!file_dd!" lss "%yy%_%mm%_%dd%" (
echo "删除文件: %%F"
REM 删除文件: del "%%F"
)
)
)
endlocal
```
这个脚本首先设置了需要操作的目录路径和需要保留的文件名。然后获取当前日期,并根据当前日期计算3天前的日期。
之后,脚本会遍历目录下的所有文件,除了名字为STAN04.LOG、STAN05.LOG和STAN06.LOG的文件外,根据文件的修改日期与3天前的日期进行比较,如果文件的修改日期早于3天前的日期,则删除该文件。
注意,在脚本中删除文件的语句被注释了(使用了`echo`命令来输出删除的文件路径),如果要真正执行删除操作,请删除相应行的注释(删除文件: del "%%F")。
请将`C:\path\to\your\directory` 替换为你要操作的目录的路径。