修正我的批处理脚本,使文件夹中的文件可以根据年月日分组

问题描述 投票:0回答:1

问题:我有文件存储在

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
.

windows batch-file automation
1个回答
1
投票

您不能在像

%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
而不是
*
来防止您创建的任何文件夹显示在文件列表中。

© www.soinside.com 2019 - 2024. All rights reserved.