[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理怎样批量将文件夹名大写改为小写?

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

[ 本帖最后由 daohe 于 2010-4-15 18:06 编辑 ]
1

评分人数

    • namejm: 感谢主动给标题标注[已解决]字样PB + 2

  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 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  2楼的代码后括号之前最好加一句 endlocal,否则,当要修改的文件夹名超过32个之后,将会出错。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

2楼的代码中setlocal enabledelayedexpansion 一句直接放在循环前
@echo off
set /p=>hlw1.txt<nul

TOP

难道你们没发现吗?
dir /L 就可以转换成小写了,无需每个字符检测...
@echo off
for /f "delims=" %%i in ('dir /s /b /l /ad "E:\images"')  do ( renname "%%i" "%%i_"  && rename "%%i_" "%%i")
1

评分人数

    • namejm: 这么冷门的参数都搜得到,PFPB + 10

TOP

回复 5楼 的帖子

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

[ 本帖最后由 hanyeguxing 于 2010-5-6 14:17 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

请教hanyeguxing版主 你的代码怎么才能不让后辍名大小写改变,只改文件名,不改后辍名怎么修改。万谢!!

TOP

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

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

TOP

返回列表