Сложное переименование файла - PullRequest
0 голосов
/ 08 января 2011

У меня есть около 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?

Ответы [ 2 ]

2 голосов
/ 08 января 2011

С указанным вами форматом имени файла вы можете использовать оператор powershell -replace, чтобы заменить средние цифры нужным выражением. Единственная сложность заключается в том, что вы должны поддерживать счетчик, пока вы просматриваете элементы. Это будет выглядеть так:

dir | foreach -begin{$cnt = 1} -process { mv $_ ($_.Name -replace '\d+',"-0111-$cnt"); $cnt += 1}
1 голос
/ 08 января 2011

Вы можете использовать [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:

Rename-File 'AB1234.gif' ($first + '-0111-' + $i + $ext)

Теперь, оберните все это в цикл, и у вас должно быть это:

dir | ForEach-Object { ... }

для тестирования, добавьте параметр -whatif в конец команды Rename-File иPS скажет вам, что он будет делать вместо того, чтобы фактически выполнить действие.

спасибо, отметьте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...