微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用date分隔文件

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

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

11年1月9日

11年2月9日

03-09-11

等等

如何将一个命令的输出插入batch file中的variables?

在Windows批处理脚本中转换相对于绝对path的脚本参数

收集文件扩展名列表 – “命令行太长”解决方法

从%〜dp0%path复制文件不起作用

在单个If条件中将variables与多个值进行比较

用batch file增加前导零的数字

batch file来分割.csv文件

如何成功地将For循环转换为批处理脚本?

如何从variables中的名称引用variables值?

cmd脚本,如何将令牌variables(例如%% a)传递给调用

提取文件日期相对简单,请参阅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 "HKCUControl PanelInternational" "HKCUControl PanelInternational-Temp" /f >nul reg add "HKCUControl PanelInternational" /v sShortDate /d "yyyy-MM-dd" /f >nul reg add "HKCUControl PanelInternational" /v sTimeFormat /d "HH:mm:ss" /f >nul ...

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

... reg copy "HKCUControl PanelInternational-Temp" "HKCUControl PanelInternational" /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 SettingsmechaflashDesktopmove_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" ) )

并做一些编辑。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐