我在一个文件夹中有大约100个文件。我想重命名这些文件。文件格式类似于
AB1234.gif
B3245.gif
AB2541.gif
AB11422.jpg
依旧......
输出文件应为
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脚本可以实现这一点吗?
答案 0 :(得分:2)
使用您描述的文件名格式,您可以使用powershell -replace
运算符将中间数字替换为您想要的表达式。唯一棘手的部分是你必须在循环项目时维护一个计数器。它看起来像这样:
dir | foreach -begin{$cnt = 1} -process { mv $_ ($_.Name -replace '\d+',"-0111-$cnt"); $cnt += 1}
答案 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
您可以通过检查exists属性,将上面的'1'替换为可以递增的变量:
$i = 1;
while (test-path ($first + '-0111-' + $i + $ext)) {$i++}
当此循环完成后,您将拥有$first + '-0111-' + $i + $ext
所需的文件名,您可以使用此文件使用Rename-File
重命名该文件:
Rename-File 'AB1234.gif' ($first + '-0111-' + $i + $ext)
现在,将所有内容包装在一个循环中,你应该拥有它:
dir | ForEach-Object { ... }
进行测试时,将-whatif
参数添加到Rename-File
命令的末尾,PS将告诉您它将执行的操作,而不是实际执行操作。
感谢, 标记