大写文件的字母

时间:2013-12-02 18:01:16

标签: batch-file

我有多个这样的文件:“Name.Of.File.M01F03.csv”但有时用户会把文件设置为“Name.of.the.file.m01f03.csv”

如何在文件夹中搜索并在“。”之后重命名(大写)第一个字母。除了从命令行扩展? 我使用的是Windows 2003服务器。

谢谢。

3 个答案:

答案 0 :(得分:1)

@echo off
pushd c:\csv_dir
setlocal enableDelayedExpansion
for %%f in (*.csv) do (
  set "filename=%%~nf"
  SET filename=!filename:.a=.A!
SET filename=!filename:.b=.B!
SET filename=!filename:.c=.C!
SET filename=!filename:.d=.D!
SET filename=!filename:.e=.E!
SET filename=!filename:.f=.F!
SET filename=!filename:.g=.G!
SET filename=!filename:.h=.H!
SET filename=!filename:.i=.I!
SET filename=!filename:.j=.J!
SET filename=!filename:.k=.K!
SET filename=!filename:.l=.L!
SET filename=!filename:.m=.M!
SET filename=!filename:.n=.N!
SET filename=!filename:.o=.O!
SET filename=!filename:.p=.P!
SET filename=!filename:.q=.Q!
SET filename=!filename:.r=.R!
SET filename=!filename:.s=.S!
SET filename=!filename:.t=.T!
SET filename=!filename:.u=.U!
SET filename=!filename:.v=.V!
SET filename=!filename:.w=.W!
SET filename=!filename:.x=.X!
SET filename=!filename:.y=.Y!
SET filename=!filename:.z=.Z!
REN "%%~nxf" "!filename!%%~xf"

)

popd
endlocal

答案 1 :(得分:1)

@echo off
setlocal EnableDelayedExpansion
cd c:\csv_dir
for %%a in (*.csv) do (
   set "oldName=%%~Na"
   set "newName="
   for %%c in ("!oldName:.=" "!") do (
      set "part=%%~c"
      set "char=!part:~0,1!"
      for %%d 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 "char=!char:%%d=%%d!"
      set "newName=!newName!!char!!part:~1!."
   )
   ECHO ren "%%a" "_"
   ECHO ren "%%~DPa_" "!newName:~0,-1!%%~Xa"
)

首先运行此批处理文件作为测试;如果显示的ren命令正确,请删除ECHO部分。

编辑添加第二个方法

上一批文件也会将首字母大写。如果第一个字母是正确的,那么方法可能更简单:

@echo off
setlocal EnableDelayedExpansion
cd c:\csv_dir
for %%a in (*.csv) do (
   set "name=%%~Na"
   for %%d 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 "name=!name:.%%d=.%%d!"
   ECHO ren "%%a" "_"
   ECHO ren "%%~DPa_" "!name!%%~Xa"
)

答案 2 :(得分:0)

另一种方式。

我只是将其作为个人测试来看看是否可以在没有的情况下完成 显示所有字母表。

与其他解决方案一样,这项工作需要更多时间。

@echo off
pushd c:\csv_dir
setlocal enableDelayedExpansion

for %%a in (*.csv) do (set $file="%%~na"
                       for /l %%f in (65,1,90) do (call:replace %%f)
                       REN "%%~nxa" "!$file!%%~xa")
endlocal
popd
exit /b

:replace
set $valmaj=%1
cmd /c exit %$valMaj%
set $valmaj=%=exitcodeAscii%
set $file=!$file:.%$valmaj%=.%$valmaj%!