首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按日期分隔文件

按日期分隔文件
EN

Stack Overflow用户
提问于 2011-09-20 16:04:04
回答 2查看 128关注 0票数 3

我想不出如何将文件按日期划分到文件夹中。

我有1,000,000个文件,而一个文件夹中的所有文件都让资源管理器感到不适:P所以我想按日期将它们划分到不同的文件夹中:

01-09-11

02-09-11

03-09-11

等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-20 21:39:38

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

代码语言:javascript
复制
@echo off
setlocal enabledelayedexpansion
FOR %%A IN (*.*) DO (
  set tf=%%~tA
  echo  %%~fA ... !tf! 
)

超越这种方法,进入你的问题的解决方案似乎非常简单…

代码语言:javascript
复制
@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是无穷无尽的。

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

代码语言:javascript
复制
....
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
...

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

代码语言:javascript
复制
...
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
...
票数 1
EN

Stack Overflow用户

发布于 2011-09-21 04:26:18

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

代码语言:javascript
复制
@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格式,从而允许它正确地比较日期和操作数。

因此,如果您想省略所有其他内容,您可以只采用以下内容:

代码语言:javascript
复制
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"
 )
)

并对其进行一些编辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7481931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档