2011-01-07 163 views
0

我在一个文件夹中有大约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脚本?

回答

2

的文件名格式,您描述,您可以使用PowerShell的-replace运营商所需的表达式替换中间的数字。唯一棘手的部分是,当你循环项目时,你必须保持一个计数器。它看起来像这样:

dir | foreach -begin{$cnt = 1} -process { mv $_ ($_.Name -replace '\d+',"-0111-$cnt"); $cnt += 1} 
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会告诉您它将执行什么操作,而不是实际执行操作。

感谢, 标记

+0

既然您已经说明了您在找什么,您可以使用zdan发布的答案。从你原来的文章中,我以为你正在寻找更复杂的东西。 – Mark 2011-01-08 02:42:16