[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 回憶愛情 于 2014-2-22 06:08 编辑

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

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

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

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

假设资料位于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. )
复制代码

TOP

  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. )
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

本帖最后由 回憶愛情 于 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

TOP

运行条件是:
文件名是用一个或两个 “-” 分隔成两段或三段
如有类似 “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

评分人数

如无特别说明,代码测试环境均为 XP SP3

TOP

謝謝 cutebe 兄的幫忙

問題解決 (使用環境為 win 7 x64

TOP

本帖最后由 回憶愛情 于 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. For /F "DELIMS=" %%M IN ('DIR/B/A-D *r.mkv *r.mp4 *r.avi *r.rmvb *r.wmv')do (
  9. set "Name=%%~nM"
  10. IF NOT EXIST "!Name!" MD "!Name!"
  11. MOVE "%%M" "!Name!"
  12. set Name2=!Name:~0,-1!
  13. IF EXIST "!Name2!.jpg" MOVE "!Name2!.jpg" "!Name!"
  14. IF EXIST "!Name2!.png" MOVE "!Name2!.png" "!Name!"
  15. IF EXIST "!Name2!.jpeg" MOVE "!Name2!.jpeg" "!Name!"
  16. )
  17. For /F "DELIMS=" %%M IN ('DIR/B/A-D *.txt *.jpg *.png *.jpeg *.mkv *.mp4 *.avi *.rmvb *.wmv')do (
  18. set "Name=%%~nM"
  19. IF NOT EXIST "!Name!" MD "!Name!"
  20. MOVE "%%M" "!Name!"
  21. )
  22. Echo.
  23. Echo.
  24. Echo.
  25. Echo END
  26. PAUSE >NUL
复制代码

TOP

暫時這樣搞定

有其他更精簡的辦法 歡迎告知 ><
@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

TOP

返回列表