如何用CMD批处理提取所有文件夹内的子文件按文件夹名称命名并提取到一个文件夹中

如何用批处理提取一堆文件夹中的子文件,(比如文件夹名称为:PN124049-10、PN125179-20、PN136468-30、PN136476-30。。。。每个子文件夹夹下面有都有一个子文件夹,子文件夹还有子文件夹,其中最里面的子文件夹里有个文件名为000001.tif格式的文件,我要把000001.tif文件重命名为文件夹各自的文件夹名前在前后加“+”号,(如+PN124049-10+.tif、+PN125179-20+.tif、+PN136468-30+.tif、+PN136476-30+.tif。。。。把然后把重命名后的文件提取到一个文件夹中并将文件夹名命名为当天日期;
以上是需求,请大神们帮忙,谢谢。
文件夹名;

双击GA000071100519;
双击GA000071100519;
双击GA000071100519,

如果遇到有多个tif文件,命名为“+文件夹名+(1)”“+文件夹+(2)”……
路径为:PN124049-10\GA000071100519\GA000071100519\000001.tif

第1个回答  2015-07-15
说这么复杂,直接 把文件重命名之后 同时打开第一个文件夹和 最后有文件的哪个文件夹,再把文件拖拉 过去 第一个 文件夹里边 就OK了,然后再把文件夹更名为当天日期 就行了
第2个回答  推荐于2016-07-23
@echo off
set "var=%date:~0,10%
set "var=%var:/-=%"
for /f "delims=" %%a in ('dir /ad /b') do (
   pushd "%%a\"
   for /r %%b in (*.tif) do (
      move "%%b" "%var%\+%%a+%%~xb"
   )
   popd 
)
pause

追问

试了一下,出现了这个问题。

追答

把这个批处理文件和那些文件夹放在一起运行

@echo off&setlocal enabledelayedexpansion
set "var=%date:~0,10%
set "var=%var:/-=%"
for /f "delims=" %%a in ('dir /ad /b') do (
   if exist "%%a" ( 
      pushd "%%a\"
      set n=0 
      for /r %%b in (*.tif) do (
         set / n+=1
         move "%%b" "%var%\+%%a+(!n!)%%~xb"
      )
   ) 
   popd 
)
pause

追问

运行还是出问题。

追答@echo off&setlocal enabledelayedexpansion
set "var=%date:~0,10%"
set "var=%var:/=%"
set "var=%var:-=%"
md %var%
for /f "delims=" %%a in ('dir /ad /b') do (
   if exist "%%a" ( 
      pushd "%%a\"
      set n=0 
      for /r %%b in (*.tif) do (
         set /a n+=1
         move "%%b" "%~dp0\%var%\+%%a+(!n!)%%~xb"
      )
   ) 
   popd 
)
pause

本回答被提问者和网友采纳