我需要一个批处理文件来将文件夹及其子文件夹中的所有文件转换为小写。例如:
Here Is StackOverflow.txt
到
here is stackoverflow.txt
文件名的一部分位于括号中。是否可以忽略它并将其置于之前的状态?例如
Here Is [A WEBSITE CALLED] StackOverflow.txt
到
here is [A WEBSITE CALLED] stackoverflow.txt
答案 0 :(得分:4)
使用JREN.BAT轻松完成 - 一种混合JScript /批处理脚本,通过正则表达式替换重命名文件。 JREN.BAT是纯脚本,可以在XP以后的任何Windows机器上本机运行。
简单地将所有文件名转换为小写:
jren "^" "" /l /s
如果您希望方括号之间的所有文本都是大写,而其他所有文本都是小写,那么可以使用两个命令轻松完成
jren "^" "" /l /s
jren "[.+?]" "uc($0)" /j /s
如果要保留方括号之间所有文本的原始大小写,并将其他所有内容转换为小写,则需要更复杂的正则表达式和替换字符串。
jren "([^[]*)(\[.*?\])*" "lc($1?$1:'')+($2?$2:'')" /j /s
由于JREN是一个批处理脚本,如果要在另一个批处理脚本中使用该命令,则必须使用CALL JREN
。
使用jren /?
获取有关所有可用选项的帮助。
答案 1 :(得分:2)
@echo off
setlocal EnableDelayedExpansion
rem Start the recursive process over the tree
call :processThisDir
goto :EOF
:processThisDir
rem Process all filenames in this folder and separate they in three parts
for /F "tokens=1-3 delims=[]" %%a in ('dir /B /A-D') do (
set "left=%%a" & set "right=%%c"
rem Convert left and right parts to lower case
for %%l in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set "left=!left:%%l=%%l!"
set "right=!right:%%l=%%l!"
)
rem Rename this file
ren "%%a[%%b]%%c" "!left![%%b]!right!"
)
rem Recursively process the folders in this folder
for /D %%a in (*) do (
cd "%%a"
call :processThisDir
cd ..
)
exit /B
答案 2 :(得分:0)
只需在答案中添加另一个选项,这会将文件夹及其子文件夹中的所有文件重命名为名称的小写版本。
来自cmdline:
请注意,在运行它之前,请确保CD
到正确的目录:
@for /f "delims=" %i in ('dir /b/l/a-d') do ren "%~fi" "%~i"
或批处理文件:
@echo off
for /f "delims=" %%i in ('dir /b/l/a-d') do echo ren "%%~fi" "%%~i"