我想不出如何将文件按日期划分到文件夹中。
我有1,000,000个文件,而一个文件夹中的所有文件都让资源管理器感到不适:P所以我想按日期将它们划分到不同的文件夹中:
01-09-11
02-09-11
03-09-11
等。
发布于 2011-09-20 21:39:38
提取文件日期相对容易,请参阅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位,那么它将发挥巨大的作用。格式上的变化以及这段代码可能出现的bug是无穷无尽的。
一种可能的解决方案是将日期格式临时更改为已知格式。在循环之前插入以下代码
....
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
...发布于 2011-09-21 04:26:18
以下是一个批处理程序,它允许您以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. E.G. 10 = October "
SET /p dd="Two digit day. E.G. 10 = Day 10 "
SET /p yyyy="4 digit year. E.G. 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"
)
)并对其进行一些编辑。
https://stackoverflow.com/questions/7481931
复制相似问题