使用batch命令将整个文件夹移动到使用其日期过滤掉的另一个文件夹

时间:2015-05-27 00:03:37

标签: windows batch-file

我想移动一些文件夹,其所有内容都少于2015年。

例如:

  

SOURCE FOLDER:

     

Folder1 2013-06-09

     

Folder2 2014-05-10

     

Folder3 2015-10-09

     

目的地文件夹:

     

清空(暂无文件)

----------结果:------------

  

SOURCE FOLDER:

     

Folder3 2015-10-09

     

目的地文件夹:

     

Folder1 2013-06-09

     

Folder2 2014-05-10

正如你所看到的那样" Folder3"被留在源文件夹后面,因为它不低于2015年。两者都是" Folder1"和" Folder2"被移动到目标文件夹,因为它们都不到2015年。

如果有人能帮助我那会很棒!

2 个答案:

答案 0 :(得分:2)

WMIC可用于根据创建日期列出相关文件夹,其方式与区域设置日期格式无关。

@echo off
setlocal disableDelayedExpansion

set "sourceDrive=c:"
set "sourcePath=\source\"
set "destination=c:\destination"
set "year=2015"

for /f "skip=1 delims=" %%A in (
  'wmic fsdir where "drive='%sourceDrive%' and path='%sourcePath:\=\\%' and installDate<'%year%0101'" get name'
) do for /f "delims=" %%F in ("%%A") do move "%%~fF" "%destination%"

注意:

  • WMIC WHERE子句忽略大小写
  • sourcePath必须以\
  • 终止
  • 在WMIC WHERE子句中使用时,必须将sourcePath中的所有\转义为\\
  • WMIC WHERE子句期望将日期作为'YYYYMMDD'格式
  • 中的字符串
  • 第二个FOR / F用于去除不需要的尾随回车字符,这是WMIC unicode输出不正确转换为ANSI的工件。

答案 1 :(得分:1)

@echo off

cd "\Source Folder"
for /D %%a in (*) do for /F "tokens=3 delims=/ " %%b in ("%%~Ta") do (
   if %%b lss 2015 (
      move "%%a" "\Destination Folder"
   )
)