用date分隔文件

我无法弄清楚如何按date将文件分成文件夹。

我有100万个文件,1个文件夹中的所有文件都使得浏览器生病:P,所以我想按date将它们分隔到不同的文件夹中:

11年1月9日
11年2月9日
03-09-11
等等

提取文件日期相对简单,请参阅HELP CALL并尝试这个简单的BAT文件

 @echo off setlocal enabledelayedexpansion FOR %%A IN (*.*) DO ( set tf=%%~tA echo %%~fA ... !tf! ) 

超越这种方法,解决您的问题似乎相当简单…

 @echo off setlocal enabledelayedexpansion FOR %%A IN (*.*) DO ( set tf=%%~tA set fd=!tf:~0,10! md !fd! move /Y %%~fA !fd! ) 

但是,等等,代码不能保证运行。 日期格式有一些依赖关系,可能会阻止这个简单的代码运行。 处理BAT文件中的日期并不容易,因为日期格式取决于语言环境,甚至是自定义首选项。 例如,在这个特定的片断中,如果日期分隔符是/ ,它将会破坏它; 或者如果日期格式使用两位数字而不是四位数字,则使日期只填充8位而不是10位…格式的变化以及因此代码的可能错误是无止境的。

一种可能的解决方案是立即将日期格式更改为已知的格式。 在循环之前插入此代码

 .... reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul ... 

然后,回到原来的循环之后。

 ... reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul ... 

以下是一个批处理程序,它允许你指定一个日期来比较格式mm dd yyyy。 然后,您可以指定日期和目的地文件夹中的“之前和之后”或“之后”。 它甚至会创建该文件夹,如果它不存在。 那么脚本会移动文件。

 @ECHO OFF ECHO Please ensure you are running this batch file from the directory where the files reside. If not, please press CTRL+C to cancel this script and move it to the correct location, then run it again. PAUSE SET BorA=none ECHO Please enter the full path of where you wish your files to be moved to. Example would be C:\Documents and Settings\mechaflash\Desktop\move_folder. Please do not include a trailing \. SET /p _path=" " :_date SET _correct=none SET /p mm="Two digit month. EG 10 = October " SET /p dd="Two digit day. EG 10 = Day 10 " SET /p yyyy="4 digit year. EG 2010 = Year 2010 " ECHO Is the date %mm%/%dd%/%yyyy% correct? [1] Yes or [2] No? SET /p _correct=" " IF %_correct% EQU 1 GOTO:BorA IF %_correct% EQU 2 (GOTO:_date) ELSE (ECHO Sorry, you entered an invalid option. & GOTO:_date) IF "%_correct%"=="none" ECHO Sorry, you entered an invalid option. & GOTO:_date :BorA ECHO Would you like to select all files on and before [1], or on and after [2] your entered date of %mm%/%dd%/%yyyy% ? SET /p BorA=" " IF %BorA% EQU 1 SET _oper=LEQ IF %BorA% EQU 2 (SET _oper=GEQ) ELSE (Echo Sorry, you entered an invalid option. & GOTO:BorA) IF "%BorA%"=="none" ECHO Sorry, you entered an invalid option. & GOTO:BorA SET _date=%yyyy%%mm%%dd% IF NOT EXIST %_path%\NUL MKDIR %_path% SETLOCAL ENABLEDELAYEDEXPANSION FOR %%A IN (*.*) DO ( SET var=%%~tA SET var2=!var:~0,-9! FOR /F "USEBACKQ tokens=1-3 delims=/" %%F IN (`ECHO !var2!`) DO ( IF %%H%%F%%G %BorA% %_date% MOVE /Y "%%A" "%_path%\~nxA" ) ) 

将var设置为%%〜tA返回文件的日期和时间。 将var2设置为!var:〜0,-9! 消除时间,只剩下日期。 下面的FOR循环从日期中删除/并将其重新排列为yyyymmdd格式,从而允许将日期与操作数进行适当的比较。

所以如果你想把所有其他的东西排除在外,你可以采取以下措施:

 SETLOCAL ENABLEDELAYEDEXPANSION FOR %%A IN (*.*) DO ( SET var=%%~tA SET var2=!var:~0,-9! FOR /F "USEBACKQ tokens=1-3 delims=/" %%F IN (`ECHO !var2!`) DO ( IF %%H%%F%%G %BorA% %_date% MOVE /Y "%%A" "%_path%\~nxA" ) ) 

并做一些编辑。