用于制作新目录的批处理脚本,命名为文件名的一部分并将文件移入

时间:2013-07-20 22:07:25

标签: windows batch-file cmd directory

例如: 我有很多文件,在一个目录中命名如下:

stuff1.jpg
stuff1 (1).jpg
stuff1 (2).jpg
stuff2.jpg
stuff2 (1).jpg
stuff2 (2).jpg
...and etc.

我希望批处理脚本将stuff1*个文件移动到名为stuff1的子文件夹; stuff2*个文件到子文件夹,名为stuff2等。

我找到了这个批处理脚本:

@echo off
for /f "delims=" %%a in ('dir /b') do (
if not "%%~fa"=="%~f0" (
md "%%~na" 2>nul
if exist "%%a" move "%%~na.*" "%%~na"
)
)

但它为stuff1 (1).jpgstuff1 (2).jpg文件

分别设置了dirs

修改: stuff1stuff2只是示例,它们可以是任何单字字符串。抱歉我的英语不好

2 个答案:

答案 0 :(得分:2)

纯批次:

@ECHO OFF &SETLOCAL
SET "startfolder=test"

CD /d %startfolder%
FOR %%a IN (*.jpg) DO (
    FOR /f "delims=. " %%b IN ("%%~a") DO (
        ECHO MD "%%~b" 2>nul
        ECHO MOVE "%%~a" "%%~b"
    )
)

sed for Windows示例:

@ECHO OFF &SETLOCAL
SET "startfolder=test"

CD /d %startfolder%
FOR %%a IN (*.jpg) DO (
    FOR /f %%b IN ('echo %%~a^|sed -r "s/(\w+).*/\1/"') DO (
        ECHO MD "%%~b" 2>nul
        ECHO MOVE "%%~a" "%%~b"
    )
)

..输出:

>dir /b test
stuff1 (1).jpg
stuff1.jpg
stuff10 (1).jpg
stuff10.jpg
stuff2 (1).jpg
stuff2.jpg
stuff20 (1).jpg
stuff20.jpg
>script
MD "stuff1"
MOVE "stuff1 (1).jpg" "stuff1"
MD "stuff1"
MOVE "stuff1.jpg" "stuff1"
MD "stuff10"
MOVE "stuff10 (1).jpg" "stuff10"
MD "stuff10"
MOVE "stuff10.jpg" "stuff10"
MD "stuff2"
MOVE "stuff2 (1).jpg" "stuff2"
MD "stuff2"
MOVE "stuff2.jpg" "stuff2"
MD "stuff20"
MOVE "stuff20 (1).jpg" "stuff20"
MD "stuff20"
MOVE "stuff20.jpg" "stuff20"

如果看起来不错,请查看您的输出并在echoMD之前移除Move

答案 1 :(得分:1)

如果“单字符串”表示“第一个点或空格之前的字符串”,则下面的批处理文件会这样做。如果您的“单字字符串”可能被其他字符分隔,则将它们包含在FOR命令的"delims=...部分中(将空格留在最后的位置)。

@echo off
for %%a in (*.*) do (
   for /F "delims=. " %%b in ("%%a") do (
      if not exist "%%b\" md "%%b"
      if exist "%%a" move "%%b*.*" "%%b"
   )
)