问题:我有文件存储在
C:\Payment List
。文件类型不同,它们的时间戳也不同。我想根据文件的创建年份对文件夹中的文件进行分组,使它们位于父文件夹中。在那个父文件夹年中,我希望根据文件创建的月份将文件分组到一个名为 month 的子文件夹中。在子文件夹 month 中,我希望根据文件创建的日期将文件分组到 day 中。下面是我的脚本
@echo off
rem Change this directory to the folder with the files
cd "C:\Payment List"
rem Loop through all files in the folder
for %%f in (*) do (
rem Extract the year, month, and day from the file timestamp
set "YEAR=%%~tf:~6,4"
set "MONTH=%%~tf:~3,2"
set "DAY=%%~tf:~0,2"
rem Create the necessary subfolders
if not exist "%YEAR%" md "%YEAR%"
if not exist "%YEAR%\%MONTH%" md "%YEAR%\%MONTH%"
if not exist "%YEAR%\%MONTH%\%DAY%" md "%YEAR%\%MONTH%\%DAY%"
rem Move the file to the subfolder
move "%%f" "%YEAR%\%MONTH%\%DAY%"
)
pause
不幸的是,当我运行这个脚本时,我得到了错误:
The filename, directory name, or volume label syntax is incorrect.
The filename, directory name, or volume label syntax is incorrect.
The specified path is invalid.
0 file(s) moved.
请帮我编写脚本。
我希望脚本根据文件创建的时间戳对文件夹中的所有文件进行分组。即必须在文件夹中找到 2019 年 5 月 1 日的文件
2019\05\01
.
您不能在像
%f
这样的参数样式变量上使用替换语法。首先使用 SET
. 将值存储到普通变量
setlocal EnableDelayedExpansion
for %%f in (*) do (
rem Extract the year, month, and day from the file timestamp
set STAMP=%%~tf
set YEAR=!STAMP:~6,4!
set MONTH=!STAMP:~3,2!
set DAY=!STAMP:~0,2!
...
)
您还必须激活延迟扩展。否则,变量将在进入循环之前设置。
也许您还想通过使用
*.csv
而不是*
来防止您创建的任何文件夹显示在文件列表中。