0

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

东西1.jpg
东西1 (1).jpg
东西1 (2).jpg
东西2.jpg
东西2 (1).jpg
东西2 (2).jpg
...等等。

我希望批处理脚本将文件移动stuff1*到名为的子文件夹stuff1stuff2*文件到子文件夹,命名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文件创建了单独的目录

编辑: stuff1并且stuff2只是示例,它们可以是任何一个单词的字符串。对不起我的英语不好

4

2 回答 2

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"
    )
)

Windows的 sed 示例:

@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 测试
东西1 (1).jpg
东西1.jpg
东西10 (1).jpg
东西10.jpg
东西2 (1).jpg
东西2.jpg
东西20 (1).jpg
东西20.jpg
>脚本
MD“东西1”
移动“stuff1 (1).jpg”“stuff1”
MD“东西1”
移动“stuff1.jpg”“stuff1”
MD“东西10”
移动“stuff10 (1).jpg”“stuff10”
MD“东西10”
移动“stuff10.jpg”“stuff10”
MD“东西2”
移动“stuff2 (1).jpg”“stuff2”
MD“东西2”
移动“stuff2.jpg”“stuff2”
MD“东西20”
移动“stuff20 (1).jpg”“stuff20”
MD“东西20”
移动“stuff20.jpg”“stuff20”

如果看起来不错,请查看您的输出并在andecho之前删除。MDMove

于 2013-07-20T22:35:09.853 回答
1

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

@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"
   )
)
于 2013-07-21T02:17:40.240 回答