找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20508|回复: 7

[已解決] 批处理怎样利用主檔名創建資料夾? #7

[复制链接]
发表于 2012-8-10 02:50:32 | 显示全部楼层 |阅读模式
本帖最后由 回憶愛情 于 2014-2-22 06:08 编辑

有個目錄下 檔案挺散亂的 想做個整理

資料很多 所以打算用 批處理來完成

利用 主檔名 來創建資料夾
例:
a.txt
a.jpg
a.png
創建 資料夾 a 並且把 a.* 移動到 a

例:
b.txt
b.jpg
b.png
創建 資料夾 b 並且把 b.* 移動到 b

(主檔名 就有數千種.... 不知道該如何著手  懇請高手指點

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-8-10 08:01:34 | 显示全部楼层
假设资料位于abc目录下,就将代码保存到abc目录下运行
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d /b') do (
  3.   if /i not "%%a"=="%~nx0" (
  4.     md "%%~na" 2>nul&move "%%a" "%%~na"
  5.   )
  6. )
复制代码
发表于 2012-8-10 08:02:59 | 显示全部楼层
  1. @ECHO OFF
  2. FOR /F "DELIMS=" %%M IN ('DIR/B/A-D *.TXT *.JPG *.PNG')DO (
  3.  IF NOT EXIST "%%~NM" MD "%%~NM"
  4.  MOVE "%%M" "%%~NM"
  5. )
复制代码
 楼主| 发表于 2012-8-10 12:00:42 | 显示全部楼层
本帖最后由 回憶愛情 于 2012-8-10 12:05 编辑

谢谢 两位的帮忙  搞定整理(速度好快 Q_Q

那再有一以下这种情况 又该如何修改呢

例: HCG-401.txt   HCG-401-C.avi   HCG-401-B.jpg  HCG-401-A.jpg
放进 HCG-401  这资料夹

例: ACK-105.txt   ACK-105-C.avi   ACK-105-B.jpg  ACK-105-A.jpg
放进 ACK-105  这资料夹

有就是说 同档名 会有不同细微分别  -A -B -C
发表于 2012-8-10 13:29:15 | 显示全部楼层
运行条件是:
文件名是用一个或两个 “-” 分隔成两段或三段
如有类似 “HCG--401.txt” (即分隔符连续两个或多个)的情况,创建目录时会视同只有一个 “-”
批处理放置在包含这些文件的目录下运行
  1. @ECHO OFF
  2. FOR /F "DELIMS=" %%M IN ('DIR/B/A-D *.TXT *.JPG *.AVI')DO (
  3.  FOR /F "TOKENS=1-3 DELIMS=-" %%F IN ("%%M")DO (
  4.   IF NOT EXIST "%%F-%%~NG" MD "%%F-%%~NG"
  5.   MOVE "%%M" "%%F-%%~NG"
  6.  )
  7. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-8-10 17:40:46 | 显示全部楼层
謝謝 cutebe 兄的幫忙

問題解決 (使用環境為 win 7 x64
 楼主| 发表于 2014-2-10 01:14:09 | 显示全部楼层
本帖最后由 回憶愛情 于 2014-2-10 22:30 编辑

若條件 修改一下
如以下 是否能精簡一些呢



  1. @Echo off
  2. setlocal enabledelayedexpansion

  3. For /F "DELIMS=" %%M IN ('DIR/B/A-D *-C.mkv *-C.mp4 *-C.avi *-C.rmvb *-C.wmv')do (

  4.                 set Name2= %%M
  5.                 set Name2=!Name2:-C=r!
  6.                 ren %%M !Name2!               
  7.         )
  8.        
  9. For /F "DELIMS=" %%M IN ('DIR/B/A-D *r.mkv *r.mp4 *r.avi *r.rmvb *r.wmv')do (
  10.         set "Name=%%~nM"
  11.         IF NOT EXIST "!Name!" MD "!Name!"
  12.         MOVE "%%M" "!Name!"
  13.         set Name2=!Name:~0,-1!
  14.         IF EXIST "!Name2!.jpg" MOVE "!Name2!.jpg" "!Name!"
  15.         IF EXIST "!Name2!.png" MOVE "!Name2!.png" "!Name!"
  16.         IF EXIST "!Name2!.jpeg" MOVE "!Name2!.jpeg" "!Name!"
  17.         )

  18. For /F "DELIMS=" %%M IN ('DIR/B/A-D *.txt *.jpg *.png *.jpeg *.mkv *.mp4 *.avi *.rmvb *.wmv')do (
  19.         set "Name=%%~nM"
  20.         IF NOT EXIST "!Name!" MD "!Name!"
  21.         MOVE "%%M" "!Name!"
  22.         )

  23. Echo.
  24. Echo.
  25. Echo.
  26. Echo END
  27. PAUSE >NUL

复制代码
 楼主| 发表于 2014-2-22 06:06:24 | 显示全部楼层
暫時這樣搞定

有其他更精簡的辦法 歡迎告知 ><
@Echo off
setlocal enabledelayedexpansion
IF NOT EXIST "inditeR" MD "inditeR"
IF NOT EXIST "Temp" MD "Temp"

For /F "DELIMS=" %%M IN ('DIR/B/A-D *-C.mkv *-C.mp4 *-C.avi *-C.rmvb *-C.wmv')do (
                set Name2= %%M
                set Name2=!Name2:-C=r!
                ren %%M !Name2!               
        )
       

For /F "DELIMS=" %%M IN ('DIR/B/A-D *r.mkv *r.mp4 *r.avi *r.rmvb *r.wmv')do (
        set "Name=%%~nM"
        set Name2=!Name:~0,-1!
        IF NOT EXIST "inditeR\!Name!" MD "inditeR\!Name!"
       
        For /F "DELIMS=" %%N IN ('DIR/B/A-D !Name2!.jpg !Name2!.png !Name2!.jpeg')do (
                IF EXIST %%N MOVE "%%N" "inditeR\!Name!\"
                IF EXIST %%M MOVE "%%M" "inditeR\!Name!\"
                )
        )
       
For /F "DELIMS=" %%M IN ('DIR/B/A-D *.txt *.jpg *.png *.jpeg *.mkv *.mp4 *.avi *.rmvb *.wmv')do (
        set "Name=%%~nM"
        IF NOT EXIST "Temp\!Name!" MD "Temp\!Name!"
        MOVE "%%M" "Temp\!Name!"
        )       


::驗證
cls
Echo.
Echo.
For /F  %%i in ('dir %~dp0inditeR /A /B')Do (
        set "aaq=%%~ni" && set "aaq2=!aaq:~0,-1!" && set /a mou1=0 && set /a mou2=0
        IF EXIST "inditeR\!aaq!\!aaq2!.jpg" set /a mou1+=1
        IF EXIST "inditeR\!aaq!\!aaq2!.png" set /a mou1+=1
        IF EXIST "inditeR\!aaq!\!aaq2!.jpeg" set /a mou1+=1
        IF "!mou1!" LEQ "0" Echo Error1:inditeR\!aaq!.jpg
        IF EXIST "inditeR\!aaq!\!aaq!.mkv" set /a mou2+=1
        IF EXIST "inditeR\!aaq!\!aaq!.mp4" set /a mou2+=1
        IF EXIST "inditeR\!aaq!\!aaq!.avi" set /a mou2+=1
        IF EXIST "inditeR\!aaq!\!aaq!.wmv" set /a mou2+=1
        IF EXIST "inditeR\!aaq!\!aaq!.rmvb" set /a mou2+=1
        IF "!mou2!" LEQ "0" Echo Error1:inditeR\!aaq!.avi
        )

For /F  %%i in ('dir %~dp0Temp /A:D /B')Do (
        set "aaq=%%~ni" && set /a mou1=0 && set /a mou2=0
        IF EXIST "Temp\!aaq!\!aaq!.jpg" set /a mou1+=1
        IF EXIST "Temp\!aaq!\!aaq!.png" set /a mou1+=1
        IF EXIST "Temp\!aaq!\!aaq!.jpeg" set /a mou1+=1
        IF "!mou1!" LEQ "0" Echo Error2:Temp\!aaq!.jpg
        IF EXIST "Temp\!aaq!\!aaq!.mkv" set /a mou2+=1
        IF EXIST "Temp\!aaq!\!aaq!.mp4" set /a mou2+=1
        IF EXIST "Temp\!aaq!\!aaq!.avi" set /a mou2+=1
        IF EXIST "Temp\!aaq!\!aaq!.wmv" set /a mou2+=1
        IF EXIST "Temp\!aaq!\!aaq!.rmvb" set /a mou2+=1
        IF "!mou2!" LEQ "0" Echo Error2:Temp\!aaq!.avi
        )


Echo.
Echo.
Echo.
Echo task END
PAUSE >NUL
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 05:29 , Processed in 0.033530 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表