跳到主要内容

目录名操作

批量对目录子目录进行加前缀、加后缀、替换字符、删除字符等操作,还有删除空目录。

利用批处理对目录名进行操作。

保存代码到 目录名操作.bat 执行,将要改动的目录拖放进来,按提示执行。

@echo off
@REM @Author: [email protected]
mode con cols=100 lines=38
color 02
title 文件夹操作
SETLOCAL ENABLEDELAYEDEXPANSION

:GTBegin
cls
@echo 文件夹操作 [前后缀、序数、替换、删除、创建]
@echo --------------------------------------------
@echo 所有操作按回车键 (Enter) 继续
@echo --------------------------------------------
set /p HandleDir=拖一个需处理的文件夹进来:

:GTCONTINUE
cls
@echo 文件夹操作
@echo --------------------------------------------
@echo 当前目录:%HandleDir%
@echo.
@echo -----------------1.加前缀-----------------
@echo 11 - 仅第一层子目录:父目录名-本身目录名
@echo 12 - 第一层下所有层级的目录名:上一层目录名-本身目录名
@echo 13 - 仅第一层子目录:前缀字符-本身目录名
@echo 14 - 第一层下所有层级的目录名:前缀字符-本身目录名
@echo -----------------2.加后缀-----------------
@echo 21 - 仅第一层子目录:本身目录名-后缀字符
@echo 22 - 第一层下所有层级的目录名:本身目录名-后缀字符
@echo -----------------3.替换删除-----------------
@echo 31 - 仅替换第一层子目录名
@echo 32 - 替换第一层级下所有层级的目录名
@echo 33 - 仅删除第一层子目录名
@echo 34 - 删除第一层级下所有层级的目录名
@echo -----------------4.创建目录-----------------
@echo 41 - 创建目录(仅当前目录)
@echo 42 - 创建目录(第一层子目录)
@echo -----------------5.创建文件-----------------
@echo 51 - 创建文件(仅当前目录)
@echo 52 - 创建文件(仅第一层子目录)
@echo 53 - 创建文件(所有子目录)
@echo -------------------其它-------------------
@echo 8 - 重新选择目录
@echo 9 - 退出
@echo.
set GTOperator=9
set /p GTOperator="选择操作数:"
@echo.

if %GTOperator% equ 11 goto GTDIRPREFIX
if %GTOperator% equ 12 goto GTSUBDIRPREFIX
if %GTOperator% equ 13 goto GTDIRPREFIXCUSTOM
if %GTOperator% equ 14 goto GTSUBDIRPREFIXCUSTOM

if %GTOperator% equ 21 goto GTDIRSUFFIX
if %GTOperator% equ 22 goto GTSUBDIRSUFFIX
if %GTOperator% equ 23 goto GTDIRSUFFIXCUSTOM
if %GTOperator% equ 24 goto GTSUBDIRSUFFIXCUSTOM

if %GTOperator% equ 31 goto GTDIRREPLACE
if %GTOperator% equ 32 goto GTSUBDIRREPLACE
if %GTOperator% equ 33 goto GTDIRDEL
if %GTOperator% equ 34 goto GTSUBDIRDEL

if %GTOperator% equ 41 goto GTMKDIR
if %GTOperator% equ 42 goto GTSUBDIRMKDIR

if %GTOperator% equ 51 goto GTMKFILE
if %GTOperator% equ 52 goto GTSUBDIRMKFILE
if %GTOperator% equ 53 goto GTAllSUBDIRMKFILE

if %GTOperator% equ 8 goto GTBegin
if %GTOperator% equ 9 goto GTExit

echo 请选择正确的操作数
pause >nul
goto GTCONTINUE

rem @echo 不能做文件名称的字符
rem @echo \ / : * ? " < > |

rem 11.仅第一层子目录:父目录名-本身目录名
:GTDIRPREFIX
cd /d "!HandleDir!"
for /f "delims=" %%i in ("%cd%") do set "DirNamePrefix=%%~nxi"
for /f "delims=" %%i in ('dir /ad /b 2^>nul') do (
if not "%~nx0"=="%%i" (
ren "%%i" "%DirNamePrefix%-%%~ni"
)
)
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 12.第一层下所有层级的目录名:上一层目录名-本身目录名
:GTSUBDIRPREFIX
cd /d "!HandleDir!"
for /f "usebackq delims=" %%i in (`dir /ad /b /s^|sort /r`) do (
for /f "usebackq delims=" %%j in (`dir /ad /b "%%i\" 2^>nul`) do (
ren "%%i\%%j" "%%~nxi-%%~nj" ) )
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 13.仅第一层子目录:前缀字符-本身目录名
:GTDIRPREFIXCUSTOM
set FilePrefix=""
set /p FilePrefix="前缀字符:"
cd /d "!HandleDir!"
for /f "usebackq delims=" %%i in (`dir /ad/b`) do (
if not "%%i"==%0 ren "%%i" "%FilePrefix%%%~ni")
set FilePrefix=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 14.第一层下所有层级的目录名:前缀字符-本身目录名
:GTSUBDIRPREFIXCUSTOM
set SubFilePrefix=""
set /p SubFilePrefix="前缀字符:"
cd /d "!HandleDir!"
for /f "usebackq delims=" %%i in (`dir /ad /b /s^|sort /r`) do (
for /f "usebackq delims=" %%j in (`dir /ad /b "%%i\" 2^>nul`) do (
ren "%%i\%%j" "!SubFilePrefix!%%~nj"))
set SubFilePrefix=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 21.仅第一层子目录:本身目录名-后缀字符
:GTDIRSUFFIX
set FileSuffix=""
set /p FileSuffix="后缀字符:"
cd /d "!HandleDir!"
for /f "usebackq delims=" %%i in (`dir /ad/b`) do (
if not "%%i"==%0 ren "%%i" "%%~ni%FileSuffix%")
set FileSuffix=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 22.第一层下所有层级的目录名:本身目录名-后缀字符
:GTSUBDIRSUFFIX
set SubFileSuffix=""
set /p SubFileSuffix="后缀字符:"
cd /d "!HandleDir!"
for /f "usebackq delims=" %%i in (`dir /ad /b /s^|sort /r`) do (
for /f "usebackq delims=" %%j in (`dir /ad /b "%%i\" 2^>nul`) do (
ren "%%i\%%j" "%%~nj!SubFileSuffix!"))
set SubFileSuffix=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE


rem 31.仅替换第一层子目录名
:GTDIRREPLACE
cd /d "!HandleDir!"
set /p oldStr=原字符:
set /p newStr=替换成:
for /f "usebackq tokens=*" %%a in (`dir /ad /b`) do (
set "newFileName=%%~nxa"
set "newFileName=!newFileName:%oldStr%=%newStr%!"
ren "%%a" "!newFileName!"
)
set oldStr=""
set newStr=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 32.替换第一层级下所有层级的目录名
:GTSUBDIRREPLACE
cd /d "!HandleDir!"
set /p oldStr=原字符:
set /p newStr=替换成:
for /f "usebackq delims=" %%i in (`dir /ad /b /s^|sort /r`) do (
for /f "usebackq delims=" %%j in (`dir /ad /b "%%i\" 2^>nul`) do (
set "newFileName=%%~nxj"
set "newFileName=!newFileName:%oldStr%=%newStr%!"
ren "%%i\%%j" "!newFileName!"))
set oldStr=""
set newStr=""
set newFileName=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 33.仅删除第一层子目录名
:GTDIRDEL
cd /d "!HandleDir!"
set /p DelStr=删除字符:
for /f "usebackq tokens=*" %%a in (`dir /ad /b`) do (
set "str=%%a"
set "str=!str:%DelStr%=!"
ren "%%a" "!str!"
)
set DelStr=""
set str=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 34.删除第一层级下所有层级的目录名
:GTSUBDIRDEL
cd /d "!HandleDir!"
set /p DelStr=删除字符:
for /f "usebackq delims=" %%i in (`dir /ad /b /s^|sort /r`) do (
for /f "usebackq delims=" %%j in (`dir /ad /b "%%i\" 2^>nul`) do (
set "str=%%~nxj"
set "str=!str:%DelStr%=!"
ren "%%i\%%j" "!str!"))
set DelStr=""
set str=""
echo.
echo :) 搞定(回车继续其它操作)
pause >nul
goto GTCONTINUE

rem 41.创建目录(仅当前目录)
:GTMKDIR
set /p CDirName=目录名:
if "%CDirName%"=="" goto :GTMKDIR
cd /d "!HandleDir!"
md %CDirName%
echo.
echo :) 搞定(回车继续其它操作)!
pause >nul
goto GTCONTINUE

rem 42.创建目录(第一层子目录)
:GTSUBDIRMKDIR
set /p SubCDirName=目录名:
if "%SubCDirName%"=="" goto :GTSUBDIRMKDIR
cd /d "!HandleDir!"
for /f "delims=" %%i in ('dir /b /ad') do (
cd "%%i"
md %SubCDirName%
cd "%%~dpi"
)
echo.
echo :) 搞定(回车继续其它操作)!
pause >nul
goto GTCONTINUE

rem 51.创建文件(仅当前目录)
:GTMKFILE
set /p CFileName=文件名:
if "%CFileName%"=="" goto :GTMKFILE
set CFiledNameExpande="%CFileName%".txt
cd /d "!HandleDir!"
cd.>"%CFiledNameExpande%"
echo.
echo :) 搞定(回车继续其它操作)!
pause >nul
goto GTCONTINUE

rem 52.创建文件(第一层子目录)
:GTSUBDIRMKFILE
set /p SubCFileName=文件名:
if "%SubCFileName%"=="" goto :GTSUBDIRMKFILE
set CFiledNameExpande="%SubCFileName%".txt
cd /d "!HandleDir!"
for /f "tokens=*" %%i in ('dir /b /ad') do cd.>"%%i\%CFiledNameExpande%"
echo.
echo :) 搞定(回车继续其它操作)!
pause >nul
goto GTCONTINUE

rem 53.创建文件(所有子目录)
:GTAllSUBDIRMKFILE
set /p AllSubCFilesName=文件名:
if "%AllSubCFilesName%"=="" goto :GTAllSUBDIRMKFILE
set CFiledNameExpande="%AllSubCFilesName%".txt
cd /d "!HandleDir!"
for /f "tokens=*" %%i in ('dir /b /ad /s') do cd.>"%%i\%CFiledNameExpande%"
echo.
echo :) 搞定(回车继续其它操作)!
pause >nul
goto GTCONTINUE

:GTExit
exit


删除所有空目录

@echo off
@REM @Author: [email protected]
title 删除所有空目录
@echo 删除所有空目录(含子目录)
@echo -----------------------------
@ set /p GTConfirm="继续操作吗?(y/n) "

if /i "%GTConfirm:~0,1%"=="y" (
goto GTYES
) else ( goto GTNO )

:GTYES
for /f "delims=" %%i in ('dir /ad /b /s^|sort /r') do rd /q "%%i" 2>nul
@echo :) 操作完成!
pause

:GTNO
exit

@Echo Off
@REM @Author: [email protected]
title 删除所有空目录
SETLOCAL ENABLEDELAYEDEXPANSION
@echo 删除所有空目录(含子目录)
@echo -----------------------------
@ set /p GTConfirm="继续操作吗?(y/n) "
if /i "%GTConfirm:~0,1%"=="y" (
goto GTYES
) else ( goto GTNO )
:GTYES
for /f "delims=" %%i in ('dir /ad /b /s') do call :RdEmptyDir "%%i"
goto :eof
:RdEmptyDir
rd %1 2>nul||goto :eof
set DirPath=%1
for /f "delims=" %%i in (%DirPath%) do (
set DirPath="%%~dpi"
for /f "delims=" %%j in ('dir /ad /b "%%~dpi"')do rd "%%~dpi%%j" 2>nul||goto :eof
)
if "%DirPath:~-2,1%"=="\" set DirPath="%DirPath:~1,-2%"
if /i not "%cd%"==%DirPath% call :RdEmptyDir %DirPath%
goto :eof

:GTNO
exit


更新日志:

  • 2017-05-22