如何使用通配符批量移动文件夹

时间:2013-06-27 00:12:28

标签: batch-file wildcard move directory

我有一堆名为Ex 20132706201323062013220520133004的文件夹。

我想将这些文件夹移动到相应的文件夹,我可以写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

但是我使用通配符并不成功。

我做错了什么?

1 个答案:

答案 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长,转换并重新格式化目的地名称并完成!