批处理文件移动特定文件

时间:2013-12-16 20:12:35

标签: windows batch-file

我有这个模板的大量文件:

example1.part001.rar
example1.part002.rar
example1.part003.rar
...

example2.part001.rar
example2.part002.rar
example2.part003.rar
...

有时在“part”之后只有两位数

example3.part01.rar
example3.part02.rar
example3.part03.rar
...

我正在尝试创建一个批处理文件,该文件首先生成 n 目录( n 用于多个文件组),名称为“example n “,然后将所有亲戚文件移入其中。 我会更好地解释。

我有

cat.part01.rar
cat.part02.rar
cat.part03.rar
dog.part001.rar
dog.part002.rar
mouse.part01.rar
mouse.part02.rar
mouse.part03.rar
mouse.part04.rar

我想首先制作目录“cat”,“dog”和“mouse”,然后将所有亲戚文件移入其中(我的意思是“foldername.part * .rar in”foldername“),所以”cat。 part * .rar“files into”cat“文件夹等。 文件很多,文件名非常不同且随机。

有人能帮助我吗?感谢

4 个答案:

答案 0 :(得分:1)

编辑:

@echo off&cls
setlocal EnableDelayedExpansion

for %%a in (*.rar) do (set $file=%%~na
                       set $file=!$file:^.= !
                       call:work %%a)
exit /b
:work
for %%b in (!$file!) do (if not exist %%b md %%b
                         copy "%1" ".\%%b"
                         exit /b)

答案 1 :(得分:1)

这也应该这样做,并处理其中包含!的文件名。

@echo off
for %%a in (*.rar) do (
 if exist "%%a" for %%b in ("%%~na") do (
    md "%%~nb" 2>nul
    move "%%~nb.part*.rar" "%%~nb" >nul
 )
)
pause

答案 2 :(得分:0)

在这里,我通过“。”分割文件名来获取组列表。然后我得到第一列的uniq值。对于每个结果,我创建了目录。然后将所有文件移动到目录

#/usr/bin/sh

groupnames=(`ls *.rar | awk -F"." '{print $1}' | uniq`)

for i in ${groupnames[*]}; do

  mkdir $i
  mv $i.*.rar ./$i/

done

答案 3 :(得分:0)

测试的示例文件:

ball.part1.rar
ball.part2.rar

cat.part01.rar
cat.part02.rar

dog.part001.rar
dog.part002.rar

该脚本会创建文件夹 ball cat dog ,之后,它会将文件移动到各自的文件夹,使用部分< b> X ,部分 XY ,部分 XYZ 在文件名中

@echo off
@break off
@title Batch file move specific files
@color 0a
@cls

setlocal EnableDelayedExpansion

if "%~1" NEQ "" (
  set "WORKINGDIR=%~1"
) else (
  set "WORKINGDIR=!CD!"
)

if not exist "!WORKINGDIR!\*.rar" (
  set "WORKINGDIR=!CD!"
)

if not exist "!WORKINGDIR!\*.rar" (
  echo There are no winrar files in this directory
  echo.
  echo Exiting...
  echo.
  ping -n 4 localhost>nul
  pause
  exit
)

for %%a in ( "!WORKINGDIR!\*.rar" ) do (
  set "name=%%~nxa"
  if "!name:~-4!" EQU ".rar" (
    set "name=!name:~0,-4!"
  )
  if "!name:~-8,5!" EQU ".part" (
    echo !name:~-7! | find ".">nul
    if "!errorlevel!" NEQ "0" (
      set "name=!name:~0,-8!"
    ) else (
      set "skip=yes"
    )
  ) else if "!name:~-7,5!" EQU ".part" (
    echo !name:~-6! | find ".">nul
    if "!errorlevel!" NEQ "0" (
      set "name=!name:~0,-7!"
    ) else (
      set "skip=yes"
    )
  ) else if "!name:~-6,5!" EQU ".part" (
    echo !name:~-5! | find ".">nul
    if "!errorlevel!" NEQ "0" (
      set "name=!name:~0,-6!"
    ) else (
      set "skip=yes"
    )
  )
  if not defined skip (
    set "skip=no"
  )
  if "!skip!" EQU "no" (
    if not exist "!WORKINGDIR!\!name!\" (
      mkdir "!WORKINGDIR!\!name!\"
    )
    move /y "!WORKINGDIR!\%%~nxa" "!WORKINGDIR!\!name!\%%~nxa"
  )
  set "skip=no"
)

pause
exit