我正在清理成千上万的文件名,大多数的结构像:“xxxx xxxx - xxxxx xxxx xxxx.yyy”问题是有些是大写的,有些则不是。 (其实也有其他问题,但我可以很容易地解决这些问题。)如何使用FINDSTR大写所有单词的字符串?
我想采取任何字符的字符串,并在任何时间段之前大写它的所有单词。
最好使用一行代码,使用管道而不是使用文件,就像使用FIND一样。
最后,我宁愿只是一次大写整个字符串,但我并不反对分别处理每个单词。
实施例:
Input: "this - string IS an EXAMPLE 4 u"
Output: "This - String IS An EXAMPLE 4 U"
欲忽略所有大写和非字母字符(破折号,下划线,数字,等),只是将它们传递通过不受影响。
所以我想能够使用这样的代码(2号线是相关的):
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或任何其他第三方软件建议,尽管我会对其他基于MS的解决方案(Enterprise或Ultimate附带的或可从Microsoft下载的)提供支持。
在此先感谢!
编辑 - 第二个解决方案丢失循环内的ENDLOCAL。现在全部修好了。 – dbenham 2012-07-17 14:06:50
有趣。但我想我不清楚。我想只是把这个词大写(第一个字符在上面),而不是整个单词。抱歉。尽管你的方法让我思考。我只是使用了26个不同的命令,比如“set nam =%nam:a = A%”。我会看看我是否可以用你的方法将其缩短为几行。对不起,我没有代表投票给你。不管怎么说,还是要谢谢你! – 2012-07-27 08:52:58
刚刚得到代表投票了,所以我做到了。^_^ – 2012-07-27 10:17:39