从文件名按日期批量创建文件夹

时间:2018-07-25 07:33:17

标签: batch-file

我想出的最好的方法是:

for %%i in (*) do md "%%~ni" && move "%%~i" "%%~ni"

现在的问题是我正在为每个文件创建一个文件夹,并将所有文件移动到相应的文件夹中,但是相关内容现在位于不同的文件夹中,并且文件名完全相同的东西留在了主文件夹中。 / p>

我的文件夹中有文件

sadf_02.07.2018_sadfff.xlsx
sadf_03.07.2018_fgtrh.xlsx
suyuadf_05.07.2018_uktyuk.xlsx
sarthdf_05.07.2018_sadyukyfff.xlsx
sabbdf_05.07.2018_saukyukdfff.xlsx

我需要按名称中的日期创建文件夹,并将此文件移入该文件夹

所以我应该有:

02.07.2018
    sadf_02.07.2018_sadfff.xlsx
03.07.2018
    sadf_03.07.2018_fgtrh.xlsx
05.07.2018
    suyuadf_05.07.2018_uktyuk.xlsx
    sarthdf_05.07.2018_sadyukyfff.xlsx
    sabbdf_05.07.2018_saukyukdfff.xlsx

那要怎么做到呢?

1 个答案:

答案 0 :(得分:1)

以下批次使用:

  • 枚举%% A中文件的简单方法
  • a用于/ f以在下划线处分割文件名并将日期获取到%% B
  • 将日期传递给findstr并粗略检查结构
  • 创建日期文件夹(如果不存在)
  • 最终移动文件

:: Q:\Test\2018\07\25\SO_51513265.cmd
@Echo off
PushD "X:\Folder\to\start" || (Echo couldn't find folder&pause&Exit /b 1)

For %%A in (*_*_*.xlsx) Do For /f "tokens=2delims=_" %%B in ("%%A") Do (
  Echo=%%B|Findstr "^[0-9][0-9]\.[0-9][0-9]\.20[0-9][0-9]$" 2>&1>NUL && (
  if not exist "%%B" MD "%%B">NUL
  Move "%%A" "%%B\"
  )
)

运行批处理后的样本树:

> tree /f
├───02.07.2018
│       sadf_02.07.2018_sadfff.xlsx
│
├───03.07.2018
│       sadf_03.07.2018_fgtrh.xlsx
│
└───05.07.2018
        sarthdf_05.07.2018_sadyukyfff.xlsx
        suyuadf_05.07.2018_uktyuk.xlsx