我有一堆名为Ex 20132706
,20132306
,20132205
,20133004
的文件夹。
我想将这些文件夹移动到相应的文件夹,我可以写1000行,但我想添加通配符。
这就是我目前正在做的事情:
Move \\folder1\20132706 \\folder1\june2013
Move \\folder1\20132306 \\folder1\june2013
Move \\folder1\20132205 \\folder1\May2013
Move \\folder1\20133004 \\folder1\April2013
这就是我想要做的事情:
Move \\folder1\??????06 \\folder1\june2013
Move \\folder1\??????05 \\folder1\may2013
Move \\folder1\??????04 \\folder1\april2013
但是我使用通配符并不成功。
我做错了什么?
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET localroot=u:\folder
FOR /f %%i IN (
'dir /ad /b "%localroot%" ^|findstr /r "^[0-9]*$"'
) DO CALL :movedir %%i
GOTO :EOF
:movedir
:: ensure destination is exactly 8 chars long
SET "dest=%1"
SET dest=%dest:~7%
IF NOT DEFINED dest GOTO :EOF
SET dest=%dest:~1%
IF DEFINED dest GOTO :EOF
SET "dest=%1"
:: convert month to text
SET "month="
SET "dest="&FOR %%i IN (01 january 02 february 03 march etc etc 12 december) DO IF NOT DEFINED dest (
IF DEFINED month SET dest=%%i%dest:~0,4%
IF %dest:~-2%==%%i SET month=Y
)
ECHO MOVE %localroot%\%1 %localroot%\%dest%
GOTO :eof
这应该完成所需的工作 - 您需要做的就是更改localroot
定义,以指定的格式填写月份列表,并在检查后删除ECHO
以激活{{ 1}}。
循环遍历目录,只过滤那些纯数字(开始和结束之间任意数量的数字)
检查名称是否正好8长,转换并重新格式化目的地名称并完成!