【问题标题】:batch file to name folder based on filename批处理文件根据文件名命名文件夹
【发布时间】:2012-01-03 13:29:37
【问题描述】:

我已经成功地复制和操作了一个批处理脚本,该脚本执行以下操作:

  • 查看 .csv 文件的最后 4 个字符
  • 使用此名称创建文件夹
  • 将文件移动到文件夹中

    @echo off & setlocal EnableDelayedExpansion
    echo.
    pushd "%~dp0"
    for %%j in (*.csv) do (
        set file=%%~nj
        set folder=!file:~-4!
        if !folder!==FI_2 set folder=!file:~-6!
        if not exist !folder! md !folder!
        move "%%~j" "!folder!"
    echo "%%~j" -^> "!folder!"
    )
    popd
    echo.& echo.Done
    
    :: End_Of_Batch
    

我遇到的问题是我需要按月对文件进行分组。文件名如下所示:

BS_IDX_LEVEL_YYYYMMDD_BAFI.csv

(显然 YYYYMMDD 会被替换为文件的日期)

因此,任何名为 BS_IDX_LEVEL_20111231_BAFI.csv 的文件都将进入名为“1112”的文件夹(文件夹的日期格式为 YYMM) 名为 BS_IDX_LEVEL_20111115_BAFI.csv 的文件将进入文件夹名称“1111”

有没有办法我可以改变这个脚本,以便在按文件名组织文件之前先按日期对它们进行分组?

如果我可以进一步解释,请告诉我

【问题讨论】:

  • 名称的BS_IDX_LEVEL_ 部分是否固定?

标签: batch-file


【解决方案1】:

当您循环并获取文件名的最后 4 个字符时,您还可以查看日期。我不知道文件的开头是固定的还是会发生变化,但我认为假设 date_end 语法是一致的是合理的。

set filedate=!file:~-9,-7!

这将从!file! 中存储的字符串末尾提取第 9 和第 7 之间的字符。使用您拥有的语法, 将是两位数的月份数。这也将避免与 2 位或 4 位数字日期混淆。

一旦您拥有此文件夹名称和另一个文件夹名称,您就可以简单地一次创建两个文件夹并将文件直接放入子文件夹中,因此您仍然只需要遍历文件集。

@echo off & setlocal EnableDelayedExpansion
echo.
pushd "%~dp0"
for %%j in (*.csv) do (
    set file=%%~nj
    set folder=!file:~-4!
    if !folder!==FI_2 set folder=!file:~-6!
    set filedate=!file:~-9,-7!
    SET datefolder=!folder!\!filedate!
    if not exist !folder! md !folder!
    if not exist !folder!\!filedate! md !folder!\!filedate!
    move "%%~j" "!datefolder!"
echo "%%~j" -^> "!datefolder!"
)
popd
echo.& echo.Done

:: End_Of_Batch

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多