我正在清理数千个文件名,大多数文件名的结构如下:“xxxx xxxx - xxxxx xxxx xxxx.yyy” 问题是有些是大写的,有些不是。(实际上还有其他问题,但我可以轻松解决这些问题。)
我想取一串任何字符,并在任何句点之前大写所有单词。
最好使用单行代码,使用管道,而不是像使用 FIND 那样使用文件。
最后,我更愿意一次将整个字符串大写,但我不反对单独处理每个单词。
例子:
Input: "this - string IS an EXAMPLE 4 u"
Output: "This - String IS An EXAMPLE 4 U"
我想忽略所有大写字母和非字母字符(破折号、下划线、数字等),让它们不受影响地通过。
所以我希望能够使用这样的代码(第二行是相关的):
for /f "tokens=*" %%x in ('dir /b *.zzz') do (
for /f "tokens=*" %%y in ('echo %%x ^| findstr /r "s/\s\w/\U$&/g;"') do (
rename "%%x" "%%y" ))
如果可能的话,我希望能够像这样在命令行上对其进行测试:
echo hello to you | findstr /r "s/\s\w/\U$&/g;"
我的问题是上面的例子没有提供任何输出。
如您所见,我搜索了正则表达式的示例,但无法使用 findstr 使它们即插即用。
我宁愿不将文件扩展名大写,但这很容易解决,所以我不在乎。
请不要 sed、grep 或任何其他 3rd 方软件建议,尽管我愿意接受其他基于 MS 的解决方案(Enterprise 或 Ultimate 附带的或可从 Microsoft 下载的东西)。
提前致谢!