Board logo

标题: [文件操作] [已解决]批处理怎样批量将文件夹名大写改为小写? [打印本页]

作者: daohe    时间: 2010-4-14 12:31     标题: [已解决]批处理怎样批量将文件夹名大写改为小写?

如题:例如批量将E:\images下的文件夹(包括子文件夹)大写全改为小写

[ 本帖最后由 daohe 于 2010-4-15 18:06 编辑 ]
作者: hanyeguxing    时间: 2010-4-14 13:07

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /s /b /ad "E:\images"') do (set "h=%%~nxi"
  3. for %%j 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 "h=!h:%%j=%%j!"
  4. ren "%%i" "!h!")
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-6 13:09 编辑 ]
作者: namejm    时间: 2010-4-14 13:23

  2楼的代码后括号之前最好加一句 endlocal,否则,当要修改的文件夹名超过32个之后,将会出错。
作者: todayambition    时间: 2010-4-14 22:40

2楼的代码中setlocal enabledelayedexpansion 一句直接放在循环前
作者: caruko    时间: 2010-4-15 10:33

难道你们没发现吗?
dir /L 就可以转换成小写了,无需每个字符检测...
@echo off
for /f "delims=" %%i in ('dir /s /b /l /ad "E:\images"')  do ( renname "%%i" "%%i_"  && rename "%%i_" "%%i")
作者: hanyeguxing    时间: 2010-5-6 13:25     标题: 回复 5楼 的帖子

实际使用 dir /l 参数去改文件名是件很鸡肋的事情:
ren命令语法要求:ren [drive:][path] filename1 filename2
所以ren修改文件名时,按照语法应该写成:ren "%%i" "%%~nxi_"
但使用了/s参数后,%%~nxi会被扩展回原来的大小写的

[ 本帖最后由 hanyeguxing 于 2010-5-6 14:17 编辑 ]
作者: YYEnigma    时间: 2012-11-6 15:40

请教hanyeguxing版主 你的代码怎么才能不让后辍名大小写改变,只改文件名,不改后辍名怎么修改。万谢!!
作者: muink    时间: 2015-2-14 11:23

for /f "delims=" %%i in ('dir /b/l/ad "E:\images"') do (ren "%%i" "%%i")

dir加上/s参数就会导致%%i扩展到完整路径,而%%~nxi又会被扩展回原来的大小写的
虽然是这样,但是用于不带/s参数的改名还是蛮好的,代码好短,默默收藏本帖




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2