Eu preciso de um arquivo em lotes para converter todos os arquivos em uma pasta e suas subpastas para minúsculas. Por exemplo:
Here Is StackOverflow.txt
para
here is stackoverflow.txt
Uma parte do nome do arquivo está no colchete. É possível negligenciá-lo e deixá-lo em seu estado anterior? por exemplo.
Here Is [A WEBSITE CALLED] StackOverflow.txt
para
here is [A WEBSITE CALLED] stackoverflow.txt
Respostas:
4 para resposta № 1Facilmente feito com JREN.BAT - um script JScript / batch híbrido que renomeia arquivos por meio da substituição de expressão regular. O JREN.BAT é um script puro que é executado nativamente em qualquer máquina Windows do XP em diante.
Para converter simplesmente todos os nomes de arquivos em minúsculas:
jren "^" "" /l /s
Se você quiser que todo o texto entre colchetes seja maiúsculo, e todo o resto seja minúsculo, então é feito facilmente com dois comandos
jren "^" "" /l /s
jren "[.+?]" "uc($0)" /j /s
Se você quiser preservar o caso original de todo o texto entre colchetes e converter todo o restante para minúsculas, será necessária uma expressão regular e uma string de substituição mais complicadas.
jren "([^[]*)([.*?])*" "lc($1?$1:"")+($2?$2:"")" /j /s
Como o JREN é um script em lote, você deve usar CALL JREN
se você quiser usar o comando dentro de outro script em lote.
Usar jren /?
para obter ajuda sobre todas as opções disponíveis.
2 para resposta № 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