我有这个模板的大量文件:
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“文件夹等。 文件很多,文件名非常不同且随机。
有人能帮助我吗?感谢
答案 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