通过网络删除文件夹

问题描述 投票:0回答:2

通过网络路径,每天添加两个大型文件夹,命名格式为BKP_YYYYMMDDhhmm。当我们尝试手动删除这些文件夹以进行内务处理时,会抛出众所周知的错误:

SOURCE PATH TOO LONG

所以我创建了下面的管家批处理,删除那些使用ROBOCOPY路径的顽固文件夹,一次选择最旧的文件夹作为输入。

我已安排这批次每3分钟运行一次,它运行正常。但是我希望这个批次只删除那些超过4个月的文件夹。

我找到了许多实现此目的的解决方案但由于上述所有文件夹中出现的“SOURCE PATH TOO LONG”错误而无法离开此ROBOCOPY路由。

您能否指导我在下面的脚本中需要做哪些修改,以便可以安排在一天中的固定时间运行以删除仅超过4个月的文件夹?

提前致谢!

@echo off

pushd \\networkpath\backupdirectory

for /f "delims=" %%a in ('dir "BKP_*" /a:d /o:-d /b') do set "folder=%%a"

echo %folder% >> D:\data\logs\Log.txt

rmdir emptyfolder
mkdir emptyfolder
robocopy emptyfolder "%folder%" /purge                  
rmdir %folder%
rmdir emptyfolder

exit
batch-file window batch-processing delete-file robocopy
2个回答
0
投票

这是一个混合脚本,您可以设置天数。您需要将day=-120更改为您想要的相关天数。它没有考虑时间,因此请使用您的调度程序在一天中的某个时间运行。

@echo off
set day=-120
pushd \\networkpath\backupdirectory
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\*%~n0.vbs"
set "yyyy=%result:~0,4%"
set "mm=%result:~4,2%"
set "dd=%result:~6,2%"
set "final=%yyyy%%mm%%dd%"
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir "BKP_*" /a:d /o:-d /b') do (
set "folder=%%a"
set folddate=!folder:~4,8!
if !folddate! LSS !final! call :work
)
goto :EOF

:work
echo !folder! >> D:\data\logs\Log.txt
rmdir emptyfolder
mkdir emptyfolder
robocopy emptyfolder "!folder!" /purge                  
rmdir !folder!
rmdir emptyfolder

0
投票

我提出了一个两步解决方案: 1-将x天以前的文件移动到临时文件夹 2-完全删除该文件夹

@echo off

pushd \\networkpath\backupdirectory

REM move old files to temp folder
set tmp=%RANDOM%.tmp
md %tmp%
robocopy . %tmp% /E /MOVE /XD %tmp% /minage:120 /R:1 /W:1

REM delete temp folder
set empty=%RANDOM%.tmp
md %empty%
robocopy %empty% %tmp% /E /purge

rd %tmp%
rd %empty%

这根本不会查看文件夹的时间戳;相反,它会在所有现有文件夹中递归查看文件的年龄。如果文件夹包含旧文件和新文件,则脚本不会删除该文件夹,只会删除其中的旧文件。 年龄以天为单位。

我真正想要做的是将选定的文件移动到NUL。唉,robocopy不承认NUL是一个有效的路径,即使它在注册表中定义。

性能可能是一个问题 - 如果要删除的文件首先在启动命令的主机上移动,那么可能需要很长时间。在这种情况下,也许可以安排脚本在服务器本身上运行。

© www.soinside.com 2019 - 2024. All rights reserved.