找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29646|回复: 7

[文件操作] (已解决)怎么把文件夹名的每个单词首字母都大写?

[复制链接]
发表于 2020-2-3 23:13:29 | 显示全部楼层 |阅读模式
本帖最后由 itunesis 于 2020-2-5 19:40 编辑

大家好!

我想让现在的文件名中的单词每个首字母变成大写,单词是按空格或者 - 号作为分隔的。

这个bat能搞得定吗?
发表于 2020-2-4 20:06:04 | 显示全部楼层
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath "%~0" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # 我想让目录下的文件/文件夹(包含子文件夹)的全部文件和文件夹的名称全部改成 首字母大写单词-Capital Word
  10. Get-ChildItem -Path . -Filter * -Recurse | ForEach-Object -Begin {
  11.   $re = [regex]'(?i)[a-z]+'
  12.   $evaluator = [System.Text.RegularExpressions.MatchEvaluator] {
  13.     param($m)
  14.     $s = $m.Value.ToLower()
  15.     return $s.Substring(0, 1).ToUpper() + $s.Substring(1)
  16.   }
  17. } -Process {
  18.   $newName = $re.Replace($_.BaseName, $evaluator)
  19.   if ($newName -cne $_.BaseName) {
  20.     # Rename-Item -Path ($_.FullName -replace '[\[\]]', '`$&') -NewName $newName
  21.     # $_.MoveTo($newName)
  22.     cmd.exe /c "ren `"$($_.FullName)`" `"$newName$($_.Extension)`""
  23.   }
  24. }
复制代码
 楼主| 发表于 2020-2-4 20:48:28 | 显示全部楼层
回复 2# flashercs


    谢谢了,成功了
 楼主| 发表于 2020-2-4 22:54:22 | 显示全部楼层
回复 2# flashercs


    老哥,用了几次发现有几个问题。
原来单词如果是大写的,运行后其他大写字母会换成小写,

首字母大写的单词没有完全以空格符号或者-号符号来识别的。



我想只把空格 符号或者-号符号这两个字符后面单词的首字母变成大写
比如单词abc123abc  首字母大写格式应该是Abc123abc
    单词abc123-abc 首字母大写格式应该是Abc123-Abc

如果一串字母中没有空格符号或者-符号那就当作是一个单词,
比如单词you're     首字母大写格式应该是You're而不是You'Re

如果原来单词首字母就是大写的,就保持这个单词不变,不作改动。
比如原单词是ABC,首字母不需要更改了,那就保持单词ABC不改动

这样描述不知道老哥能不能看的明白,简单说就是每个单词首字母大写,
每个单词都是用空格符号或者-符号间隔开的,只有这两个符号后面的单词首字母才需要大写。
附上图片给老哥看看。
发表于 2020-2-4 23:12:18 | 显示全部楼层
回复 4# itunesis
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath "%~0" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # 我想让目录下的文件/文件夹(包含子文件夹)的全部文件和文件夹的名称全部改成 首字母大写单词-Capital Word
  10. Get-ChildItem -Path . -Filter * -Recurse | ForEach-Object -Begin {
  11.   $re = [regex]'(?<=[- ]|^)[a-z]'
  12.   $evaluator = [System.Text.RegularExpressions.MatchEvaluator] {
  13.     param($m)
  14.     return $m.Value.ToUpper()
  15.   }
  16. } -Process {
  17.   $newName = $re.Replace($_.BaseName, $evaluator)
  18.   if ($newName -cne $_.BaseName) {
  19.     # Rename-Item -Path ($_.FullName -replace '[\[\]]', '`$&') -NewName $newName
  20.     # $_.MoveTo($newName)
  21.     cmd.exe /c "ren `"$($_.FullName)`" `"$newName$($_.Extension)`""
  22.   }
  23. }
复制代码
发表于 2020-2-5 00:01:54 | 显示全部楼层
回复 5# flashercs

真厉害
发表于 2020-2-5 07:54:40 | 显示全部楼层
批量修改文件名工具(BulkRenameUtility)v2.7.1.3绿色中文版
这个好像也可以做到。大小写有四个选择:大写、小写、标题、句子。
 楼主| 发表于 2020-2-5 19:40:38 | 显示全部楼层
回复 5# flashercs


    谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:43 , Processed in 0.015031 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表