如何批处理文本文件中的目录列表?

时间:2012-10-31 08:23:09

标签: batch-file

我正在尝试为朋友清理一些旧数据。放置的数据是多个文件夹,如下所示。

  1. C:\帐簿\数据\ 0000
  2. d:\帐簿\数据\ 1092
  3. C:\ New folder \ Tally7.2 \ Data \ 0001
  4. 现在,我使用了一个正则表达式^ [0-9] [0-9] [0-9] [0-9] $和一个名为Everything的搜索引擎来查找具有四位数名称的所有可能文件夹像0000我已导出到每行包含一个目录路径的文本文件,两边用双引号括起来。

    我需要编写批处理脚本来执行以下操作。

    1. 逐行阅读文本文件。
    2. 检查目标目录中是否已存在具有该名称的文件夹。
    3. 如果是,请重命名该文件夹并将其复制。
    4. 如果没有,请复制而不重命名文件夹。
    5. 最后,我想依次重命名目标中以0000开头的所有文件夹。
    6. 我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

@echo off
setlocal EnableDelayedExpansion
set destination=C:\put the destination folder here
set newName=10000
rem Read the text file line by line
for /F "delims=" %%a in (thefile.txt) do (
   rem Check if a folder with that name already exists in the destination directory.
   set "folder=%%~Na"
   if exist "%destination%\!folder!" (
      rem If yes, then rename the folder and copy it.
      call :getNewName folder
   )
   rem If not, copy without renaming the folder.
   md "%destination%\!folder!"
   copy "%%~a" "%destination%\!folder!"
)
rem Finally, I want to sequentially rename all the folders in the destination starting with 0000. 
cd /D "%destination%"
set n=9999
for /D %%a in (*) do (
   set /A n+=1
   if "%%a" neq "!n:~-4!" (
      ren "%%a" "!n:~-4!"
   )
)
goto :EOF

:getNewName folder
   set /A newName-=1
   set folder=%newName%
   if exist "%destination%\%folder%" goto getNewName
exit /B