创建新文件夹&重命名&将具有特殊名称的所有文件夹移动到新创建的文件

时间:2014-07-18 14:54:11

标签: batch-file batch-processing

我有这个代码是根据用户需求执行的。它会在C:\test\test\test中查找包含单词part的任何文件夹,并为其执行一些操作。

set num=0
cd /d "C:\test\test\test"
for /f "delims=" %%a in ('dir *part* /b /ad /ODN ') do (

REM - New Funcations    
mkdir "tempgroup" && set name=%%a && ren "tempgroup" "!name:~0,-9!- GROUP VIDEO"
move %%a 

GOTO NEXT
)

我想扩展功能但是花了很多时间却没有得到我想要的结果。

首先%%a = 2014-07-18 13h44m10s - Part 1

  1. 复制文件夹名称并将2014-07-18 13h44m10s - Part 1重命名为2014-07-18 13h44m10s - GROUP VIDEO而不创建临时目录tempgroup。这样做的原因是,如果再次执行脚本,则阻止创建tempgroup文件夹。

  2. 将包含单词PART的所有文件夹移至2014-07-18 13h44m10s - GROUP VIDEO

  3. 以下是文件夹列表及其外观:

    2014-07-18 13h44m10s - Part 1 2014-07-18 13h45m10s - Part 2 2014-07-18 13h46m20s - Part 3 2014-07-18 13h47m32s - Part 4 2014-07-18 13h48m10s - Part 5 2014-07-18 13h48m20s - Part 6 2014-07-18 13h48m30s - Part 7 2014-07-18 13h48m40s - Part 8 2014-07-18 13h49m50s - Part 9

    上述文件夹应移至此文件夹

    2014-07-18 13h44m10s - GROUP VIDEO

    提前致谢

2 个答案:

答案 0 :(得分:1)

以下批处理代码复制所有子目录中的所有文件(但不是其子目录),名称中包含部分的目录 - GROUP VIDEOS 名称附加到第一个目录的日期/时间字符串,名称中包含部分

@echo off
setlocal enabledelayedexpansion
cd /d "C:\test\test\test"
set GroupVideoDirectory=

for /f "delims=" %%a in ('dir *part* /b /ad /ODN ') do (
    set "DirName=%%a"
    if "!GroupVideoDirectory!"=="" (
       set "GroupVideoDirectory=!DirName:~0,-9! - GROUP VIDEO"
       if not exist "!GroupVideoDirectory!" mkdir "!GroupVideoDirectory!"
    )
    copy /Y "%%a\*.*" "!GroupVideoDirectory!" >nul
)
endlocal

换句话说,来自子目录的所有文件,如

  • 2014-07-18 13h44m10s - 第1部分
  • 2014-07-18 13h44m10s - 第2部分

将复制到此批处理文件创建的目录 2014-07-18 13h44m10s - GROUP VIDEO (如果该批处理文件尚不存在)(例如,来自之前的运行)。

下一批代码文件移动到创建的目录中,并删除名称中 part 的目录。

@echo off
setlocal enabledelayedexpansion
cd /d "C:\test\test\test"
set GroupVideoDirectory=

for /f "delims=" %%a in ('dir *part* /b /ad /ODN ') do (
    set "DirName=%%a"
    if "!GroupVideoDirectory!"=="" (
       set "GroupVideoDirectory=!DirName:~0,-9! - GROUP VIDEO"
       if not exist "!GroupVideoDirectory!" mkdir "!GroupVideoDirectory!"
    )
    move /Y "%%a\*.*" "!GroupVideoDirectory!" >nul
    rd "%%a"
)
endlocal

答案 1 :(得分:1)

使用新数据 - 在文件夹副本上进行测试 如果有多组文件夹,它也会起作用。

@echo off
cd /d "C:\test\test\test"
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir *part* /b /ad') do (
   set "name=%%a" 
     if not "%%a"=="!name: - Part 1=!" set "groupfolder=!name:~0,20! - GROUP VIDEO"
   md "!groupfolder!" 2>nul
   move "%%a" "!groupfolder!" >nul
)
echo done
pause