删除3天前的目录下的所有文件,但是不删除名字中有test的文件的bat脚本
时间: 2023-08-31 20:25:12 浏览: 139
### 回答1:
这是一个用来删除 3 天前目录下的所有文件,但不删除名字中包含 "test" 的文件的 .bat 脚本:
```
@echo off
forfiles -p "C:\path\to\directory" -s -m *.* -d -3 -c "cmd /c if not @fname=='test*' del @path"
```
在这个脚本中,我们使用了 `forfiles` 命令来循环遍历 3 天前目录下的所有文件(用 `-d -3` 选项指定)。然后,我们使用 `if not @fname=='test*'` 语句来判断文件名是否以 "test" 开头,如果不是,就使用 `del` 命令删除该文件。
注意:确保将上面的脚本中的 "C:\path\to\directory" 替换为你的目录的实际路径。
希望这个脚本能够帮到你!
### 回答2:
你可以使用以下的批处理脚本来删除3天前的目录下的所有文件,但保留名字中有"test"的文件:
```batch
@echo off
setlocal
:: 设置目标目录和文件名关键词
set "target_dir=C:\目标目录的路径"
set "file_keyword=test"
:: 获取当前日期和3天前的日期
for /f "usebackq delims=" %%a in (`powershell -command "Get-Date -Format yyyy-MM-dd"`) do set current_date=%%a
for /f "usebackq delims=" %%a in (`powershell -command "$date = Get-Date; $date = $date.AddDays(-3); $date.ToString('yyyy-MM-dd')"`) do set three_days_ago=%%a
:: 切换到目标目录
pushd "%target_dir%"
:: 循环遍历该目录下的所有文件
for /r %%f in (*) do (
:: 获取文件的创建日期
for /f "usebackq delims=" %%d in (`powershell -command "(Get-Item '%%~ff').CreationTime.Date.ToString('yyyy-MM-dd')"`) do set file_date=%%d
:: 如果文件创建日期早于3天前的日期,并且文件名不包含关键词,则删除
if "%file_date%" LSS "%three_days_ago%" (
echo Deleting %%f
del "%%f" /q
) else (
:: 如果文件名包含关键词,则跳过删除
echo Skipping %%f
findstr /i /c:"%file_keyword%" "%%~nxf" >nul
if errorlevel 1 (
echo Deleting %%f
del "%%f" /q
)
)
)
:: 切换回原目录
popd
:: 结束脚本
exit /b
```
请注意替换脚本中`target_dir`为你想要操作的目录的路径,并根据需要修改`file_keyword`以匹配你想要保留的文件名中的关键词。
### 回答3:
你可以使用以下的bat脚本来删除3天前的目录下的所有文件,但是保留名字中有"test"的文件:
```bat
@echo off
setlocal
set "directory=C:\path\to\your\directory"
REM 设置要删除的文件的最后修改时间为3天前的日期
for /f "usebackq delims=" %%d in (`powershell "(Get-Date).AddDays(-3).ToString('yyyy-MM-dd')"`) do set "deletedate=%%d"
REM 遍历目录下的文件
for /r "%directory%" %%f in (*) do (
REM 获取文件名
set "filename=%%~nxf"
REM 检查文件名中是否包含"test",如果包含则跳过删除
echo "%filename%" | findstr /i "test" >nul
if not errorlevel 1 (
echo "Skipping file: %filename%"
) else (
REM 检查文件的最后修改时间是否早于删除日期
for /f "usebackq delims=" %%a in (`powershell "(Get-Item '%%~f').LastWriteTime.toString('yyyy-MM-dd')"`) do (
if "%%a" LSS "%deletedate%" (
REM 删除文件
echo "Deleting file: %%~f"
del "%%~f" /f /q
)
)
)
)
endlocal
```
请将其中的`C:\path\to\your\directory`替换为你要删除文件的目录的路径。这段脚本会首先设置要删除的文件的最后修改时间为3天前的日期,然后遍历目录下的所有文件。对于每个文件,它会检查文件名中是否包含"test",如果包含则跳过删除;否则,它会检查文件的最后修改时间是否早于删除日期,如果是,则删除该文件。
阅读全文