所以我有这个想法,按日期分类我们的文件。我们将这些文件命名为 Zxxx,后跟 mmdd,其中 x 是数字,mmdd 是月份和日期。我最初的想法是逐个进行分类
@echo off
cd C:\folder
set /p var="Enter mmdd: "
md %var%
copy c:\folder\*%var%.txt c:\folder\%var%
exit
现在我的问题是...有没有办法让它自动创建文件夹并将具有相同 mmdd 的文件移动到创建的 mmdd 文件夹中。有点像用户单击批处理文件,然后计算机看到 5 个项目,即 1208 mmdd 和 3 1209 mmdd。它创建 1208 文件夹和 1209 文件夹并分别将文件放入其中。
编辑:所以它尝试使用 for 循环并存在
@echo off
FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (101,1,931) DO ( IF EXIST "????0%%x.txt" MOVE "????0%%x.txt" \0%%x\ )
FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MKDIR 0%%x )
FOR /L %%x IN (1001,1,1231) DO ( IF EXIST "????%%x.txt" MOVE "????0%%x.txt" \0%%x\ )
pause
但出现错误“无法将多个文件移动到一个文件。”
我
答案1
您可以为此使用日期变量的子字符串。
Syntax:
%variable:~num_chars_to_skip%
%variable:~num_chars_to_skip,num_chars_to_keep%
提取年、月、日的方法如下:
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%
您现在可以引用这些,例如通过使用mkdir C:\folder\%year%\%month%-%day%
来创建类似的结构C:\folder\2017\01-25\
。
如果您需要更强大的日期处理功能,请考虑转向 powershell。
答案2
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
cd /D C:\folder
For %%A in (z*.txt) Do Echo:%%A|Findstr /i "^z[0-9][0-9][0-9][01][0-9][0-3][0-9].txt$" >NUL 2>&1 &&(
Set Filename=%%A
Set MMDD=!Filename:~3,4!
If Not Exist !MMDD! MD !MMDD!
Move %%A !MMDD!
)
- for 迭代匹配的文件
- Echo:%%A|Findstr... 粗略验证 MM/DD 的 7 个数字模式
- 必须使用
!
而不是%
vars,因为它位于需要延迟扩展的(代码块)内。 !Filename:~3,4!
是从零开始从第 4 位提取 4 个数字的子字符串表达式。