将文件放在具有相似名称的文件夹中 cmd

Place files in folders with similar names cmd

我有日期格式的输入文件夹 Year_Month_Day。每个文件夹包含很多文件:

archive
|
+2014-Apr-01
|
+2014-Apr-02
|
+2014-Apr-03
|
+2014-Apr-04

我需要根据年份和月份将所有文件从输入文件夹排序到输出文件夹:

2014
|
+2014-Apr
|
+2014-May
|
+2014-Mar

我写了脚本:

chcp 1251
setlocal enabledelayedexpansion
set input=d:\arch
set output=d:\test
set h="string"
mkdir %output%14
mkdir %output%1414-Jan
mkdir %output%1414-Feb
mkdir %output%1414-Mar
mkdir %output%1414-Apr
mkdir %output%1414-May
mkdir %output%1414-Jun
mkdir %output%1414-Jul
mkdir %output%1414-Aug
mkdir %output%1414-Sep
mkdir %output%1414-Oct
mkdir %output%1414-Nov
mkdir %output%1414-Dec
for /f %%i in ('dir /b %input%\') do (
set h=%%i
echo %h%
move %input%\%%i\#msgs\* %output%14\%h:~0,8%\
)

echo %h%

returns "string".

为什么?

在代码开头声明变量 h 并在 for 循环中重新分配变量