用于将文件名转换为小写的批处理文件

时间:2015-02-17 16:20:47

标签: batch-file

我需要一个批处理文件来将文件夹及其子文件夹中的所有文件转换为小写。例如:

Here Is StackOverflow.txt

here is stackoverflow.txt

文件名的一部分位于括号中。是否可以忽略它并将其置于之前的状态?例如

Here Is [A WEBSITE CALLED] StackOverflow.txt

here is [A WEBSITE CALLED] stackoverflow.txt

3 个答案:

答案 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"