Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理脚本在文件夹中递归移动,并将超过六天的文件移动到子文件夹中_Batch File_Cmd_Robocopy - Fatal编程技术网

Batch file 使用批处理脚本在文件夹中递归移动,并将超过六天的文件移动到子文件夹中

Batch file 使用批处理脚本在文件夹中递归移动,并将超过六天的文件移动到子文件夹中,batch-file,cmd,robocopy,Batch File,Cmd,Robocopy,所以,我有一个大文件树,类似这样 \foo\foo1\foo\files\archive \foo\foo2\foo\files\archive \foo\foo3\foo\files\archive \foo\foo4\foo\files\archive 我的目标是能够循环到每个“\files”文件夹中,并将该文件夹中的文件移动到“\archive”文件夹中(如果文件已超过6天) 理想情况下,最好使用.bat脚本。对于这类事情,我是一个真正的新手,通常只使用robocopy来执行这类任务,但由

所以,我有一个大文件树,类似这样

\foo\foo1\foo\files\archive

\foo\foo2\foo\files\archive

\foo\foo3\foo\files\archive

\foo\foo4\foo\files\archive

我的目标是能够循环到每个“\files”文件夹中,并将该文件夹中的文件移动到“\archive”文件夹中(如果文件已超过6天)

理想情况下,最好使用.bat脚本。对于这类事情,我是一个真正的新手,通常只使用robocopy来执行这类任务,但由于文件结构非常密集,因此编写50多行代码来完成这类任务似乎是一个漫长的过程


我需要能够深入到16个文件夹中,每个文件夹包含另外7个包含目标文件和存档位置的文件夹,然后确定目标文件是否超过最大年龄,如果超过最大年龄,则将其移动到位于目标位置内的子目录中

如果我理解正确,您可以尝试以下代码片段:

for /f "delims= " %%t in ('robocopy . . /njh /njs')do set "Tab=%%t"
pushd D:\
for /d /r %%i in (archive.?)do ( 
  pushD %%i
  for /f "Tokens=3 delims=%tab%" %%n in ('robocopy /L .. %%~ni /minage:6 
  ')do echo move ..\%%n
  popD
)
popD
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u ROOT=D:\”
设置“\u SRC=files”
设置“_DST=archive”
设置/A“\u年龄=7”
对于(“%\u ROOT%\*”)中的/D%%A,请执行以下操作(
对于(“%%~A\*”)中的/D%%B,请执行以下操作(
对于“%%~B\*”中的/D%%C,请执行以下操作(
机器人副本“%~C\%\U SRC%”“%%C\%\U SRC%\%\U DST%**”/MOV/IS/MINAGE:%\U AGE%
)
)
)
端部
退出/B
使用
forfiles
命令而不是
robocopy
,可以实现同样的效果:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u ROOT=D:\”
设置“\u SRC=files”
设置“_DST=archive”
设置/A“\u年龄=7”
对于(“%\u ROOT%\*”)中的/D%%A,请执行以下操作(
对于(“%%~A\*”)中的/D%%B,请执行以下操作(
对于“%%~B\*”中的/D%%C,请执行以下操作(
如果@isdir==FALSE 2>nummkdir 0x22%\u DST%0x22&move/Y@file 0x22%\u DST%0x22,则文件/P“%~C\%\u SRC%”/M“*”/D-%\u AGE%/C”cmd/C
)
)
)
端部
退出/B

我不想删除任何内容。我需要能够深入到16个文件夹中,每个文件夹包含另外7个包含目标文件和存档位置的文件夹,然后确定目标文件是否超过最大年龄,如果超过最大年龄,则将其移动到位于目标位置内的子目录中。如果我没有说清楚,很抱歉。所以请使用
move
而不是
del
。如果我要使用显式的“target”和“source”命令执行此操作。就像我通常使用robocopy一样,我需要编写112行代码来实现这一点。如果我找不到其他方法,我会这样做,但我确信有更好的方法来处理此问题。此外,父文件夹名称很容易在此文件树中更改,因此使用显式目录并不理想。只要您有一种编程方法来查找目标文件夹,您应该可以接受。看看@SomethingDark给你的链接的答案,并通过阅读来理解它,你会发现这是一条路;-)