标题: [已解決] 批处理怎样利用主檔名創建資料夾? #7 [打印本页]
作者: 回憶愛情 时间: 2012-8-10 02:50 标题: [已解決] 批处理怎样利用主檔名創建資料夾? #7
本帖最后由 回憶愛情 于 2014-2-22 06:08 编辑
有個目錄下 檔案挺散亂的 想做個整理
資料很多 所以打算用 批處理來完成
利用 主檔名 來創建資料夾
例:
a.txt
a.jpg
a.png
創建 資料夾 a 並且把 a.* 移動到 a
例:
b.txt
b.jpg
b.png
創建 資料夾 b 並且把 b.* 移動到 b
(主檔名 就有數千種.... 不知道該如何著手 懇請高手指點
作者: apang 时间: 2012-8-10 08:01
假设资料位于abc目录下,就将代码保存到abc目录下运行- @echo off
- for /f "delims=" %%a in ('dir /a-d /b') do (
- if /i not "%%a"=="%~nx0" (
- md "%%~na" 2>nul&move "%%a" "%%~na\"
- )
- )
复制代码
作者: cutebe 时间: 2012-8-10 08:02
- @ECHO OFF
- FOR /F "DELIMS=" %%M IN ('DIR/B/A-D *.TXT *.JPG *.PNG')DO (
- IF NOT EXIST "%%~NM\" MD "%%~NM"
- MOVE "%%M" "%%~NM"
- )
复制代码
作者: 回憶愛情 时间: 2012-8-10 12:00
本帖最后由 回憶愛情 于 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
作者: cutebe 时间: 2012-8-10 13:29
运行条件是:
文件名是用一个或两个 “-” 分隔成两段或三段
如有类似 “HCG--401.txt” (即分隔符连续两个或多个)的情况,创建目录时会视同只有一个 “-”
批处理放置在包含这些文件的目录下运行- @ECHO OFF
- FOR /F "DELIMS=" %%M IN ('DIR/B/A-D *.TXT *.JPG *.AVI')DO (
- FOR /F "TOKENS=1-3 DELIMS=-" %%F IN ("%%M")DO (
- IF NOT EXIST "%%F-%%~NG\" MD "%%F-%%~NG"
- MOVE "%%M" "%%F-%%~NG"
- )
- )
复制代码
作者: 回憶愛情 时间: 2012-8-10 17:40
謝謝 cutebe 兄的幫忙
問題解決 (使用環境為 win 7 x64
作者: 回憶愛情 时间: 2014-2-10 01:14
本帖最后由 回憶愛情 于 2014-2-10 22:30 编辑
若條件 修改一下
如以下 是否能精簡一些呢- @Echo off
- setlocal enabledelayedexpansion
-
- 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"
- IF NOT EXIST "!Name!" MD "!Name!"
- MOVE "%%M" "!Name!"
- set Name2=!Name:~0,-1!
- IF EXIST "!Name2!.jpg" MOVE "!Name2!.jpg" "!Name!"
- IF EXIST "!Name2!.png" MOVE "!Name2!.png" "!Name!"
- IF EXIST "!Name2!.jpeg" MOVE "!Name2!.jpeg" "!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 "!Name!" MD "!Name!"
- MOVE "%%M" "!Name!"
- )
-
- Echo.
- Echo.
- Echo.
- Echo END
- PAUSE >NUL
复制代码
作者: 回憶愛情 时间: 2014-2-22 06:06
暫時這樣搞定
有其他更精簡的辦法 歡迎告知 ><@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
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |