本帖最后由 yhcfsr 于 2018-1-7 23:37 编辑
得到4楼大神的指点,将PS的代码修正如下- $SourDir="D:\temp" #设置源目录
- Get-ChildItem -Path $SourDir -Force -Recurse -File| %{$old=$_.Name.ToLower();
- $new=(''+$old[0]).ToUpper()+$old.Substring(1, $old.Length-1);
- Rename-Item -NewName $new -Path $_.FullName -WhatIf
- }
- pause
复制代码 这时powershell脚本,保存为ps1格式。没有用过PS脚本的自行百度。WIN10以下系统,建议去MS官网升级最新PS
确认屏幕信息显示对文件的修改无误,删除最后一句(非pause)的-whatif 可实现对源文件进行修改。此脚本修改源目录及其子目录下所有文件.
看了7,8楼关于dir /l的使用,我也写了个bat,有些冗长,效率不高,聊以自娱。
原因是循环变量%%a,单独使用%%a或%%~a的确能把路径转换为小写,但如果使用%%~na又会恢复原来文件名的样子。真是坑爹啊。- @echo off
- set "SourDir=d:\temp"
-
- for /f "delims=" %%a in ('dir /a-d /s /b /l "%SourDir%\*.*"') do (
- rem 将文件名转换为小写
- call :name2lower "%%a" file_name
- setlocal enableDelayedExpansion
- rem 获取文件名第一个字符,若为小写则转换为大写
- set "head=!file_name:~0,1!"&(echo !head!|findstr /i "[a-z]"&&for %%s 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 "head=!head:%%s=%%s!")>nul
- rem 重命名
- ren "%%~a" "!head!!file_name:~1!"
- endlocal
- )
- pause
- goto:eof
-
- rem ===将文件名转换为小写===
- :name2lower
- setlocal
- set "name=%~1"
- :lp
- call set "ch=%%name:~%i%,1%%"
- if "%ch%" neq "\" set /a i-=1&goto :lp
- set /a i+=1
- call set "name=%%name:~%i%%%"
- endlocal&set "%2=%name%"&goto:eof
- rem ========================
复制代码
|