复杂文件重命名
问题描述:
我在一个文件夹中有大约100个文件。我想重命名这些文件。文件的格式是这样复杂文件重命名
AB1234.gif
B3245.gif
AB2541.gif
AB11422.jpg
等..
输出文件SHLD是
AB-0111-1.gif
B-0111-2.gif
AB-0111-3.gif
AB-0111-4.jpg
逻辑将
for(int n=0;n<files.count;n++){
if(file is starting with AB)
fileName = AB + "-0111" + n;
if(file is starting with B)
fileName = B + "-0111" + n;
}
这事可能与PowerShell脚本?
答
的文件名格式,您描述,您可以使用PowerShell的-replace
运营商所需的表达式替换中间的数字。唯一棘手的部分是,当你循环项目时,你必须保持一个计数器。它看起来像这样:
dir | foreach -begin{$cnt = 1} -process { mv $_ ($_.Name -replace '\d+',"-0111-$cnt"); $cnt += 1}
答
您可以使用[System.IO.Path] :: GetExtension获得文件的这样的扩展:
$ext = [System.IO.Path]::GetExtension('AB1234.gif')
,您可以使用$matches
变量获取文件名的第一个字母字符像这样:
if ('AB1234.gif' -match '^\D*') { $first = $matches[0]; }
,你可以建立新的文件名是这样的:
$first + '-0111-' + '1' + $ext
您可以用您可以通过检查存在这样的属性增加一个变量替换“1”上面:
$i = 1;
while (test-path ($first + '-0111-' + $i + $ext)) {$i++}
当这个循环完成
,你将有你需要$first + '-0111-' + $i + $ext
的文件名,你可以现在
Rename-File 'AB1234.gif' ($first + '-0111-' + $i + $ext)
,包装全部在了一个循环,你应该有它::使用此文件与Rename-File
重命名
dir | ForEach-Object { ... }
进行测试,将-whatif
参数添加到Rename-File
命令的末尾,PS会告诉您它将执行什么操作,而不是实际执行操作。
感谢, 标记
既然您已经说明了您在找什么,您可以使用zdan发布的答案。从你原来的文章中,我以为你正在寻找更复杂的东西。 – Mark 2011-01-08 02:42:16