массовое переименование zip-файлов в исходное имя, но удаление части имени - PullRequest
0 голосов
/ 16 января 2019

У меня есть каталоги с большим количеством почтовых индексов.

все с разными названиями программного обеспечения, которые были приобретены с течением времени.

Пример:

Software1_ABCDE-FGHIJ.zip
Software2_256SS-BM42.zip
Software3_aswdfbbgtyyn.zip

Я хочу использовать batch / powershell или bash, чтобы переименовать их всех в

Пример:

Software1.zip
Software2.zip
Software3.zip

В основном все, что после _ и до .zip должно идти, но это все случайное содержимое ... Серийные ключи в основном. Имена длинны для моего php-загрузчика, который я сделал на своем сервере, и для работы других функций необходимо ограничение, поэтому мне нужно переименовать сотни почтовых индексов.

У меня уже есть цикл for для архивирования всех файлов / папок в директории в собственный zip в bash.

for i in */; do zip -r "${i%/}.zip" "$i"; done

и у меня уже есть этот bash, который извлекает .exe из любого имени файла до .zip

rename.ul '.exe' '' *.zip

Ex:

file1_23434434.exe.zip 

стал

file1_23434434.zip

Как я могу массово переименовать все мои молнии из software1_serial-here-1234.zip к software1.zip

с сохранением исходного zip-имени программного обеспечения и расширения .zip

Ответы [ 3 ]

0 голосов
/ 16 января 2019
Get-ChildItem -Path C:\temp -Filter software* -File | 
   Rename-Item -NewName { ($_.BaseName -split '_')[0] + $_.Extension } -WhatIf

Удалите -whatif, чтобы применить действие. -whatif для предварительного просмотра.

Предполагается, что все файлы, которые вы хотите переименовать, начинаются со слова software, и в имени файла содержится только один _.

0 голосов
/ 16 января 2019

В окне командной строки Windows запустите каталог, содержащий ZIP-файлы:

for /F "tokens=1* delims=_ eol=" %I in ('dir *_*.zip /A-D-H /B 2^>nul') do ren "%I_%J" "%I.zip"

В пакетном файле, хранящемся в каталоге, содержащем ZIP-файлы:

@for /F "tokens=1* delims=_ eol=" %%I in ('dir "%~dp0*_*.zip" /A-D-H /B 2^>nul') do ren "%~dp0%%I_%%J" "%%I.zip"

Если естьнесколько подчеркиваний после имени программного обеспечения вместо одного _ или имени программного обеспечения, начинающегося с одного или нескольких подчеркиваний, необходимо использовать два цикла FOR , чтобы действительно переименовать все *_*.zip правильные файлы:

@for /F "delims= eol=" %%I in ('dir "%~dp0*_*.zip" /A-D-H /B 2^>nul') do @for /F "delims=_ eol=" %%J in ("%%I") do ren "%~dp0%%I" "%%J.zip"

Переменная цикла I внешнего FOR содержит полное имя файла ZIP с расширением файла, но без пути к файлу, а переменная цикла J of inner для цикла содержит только файлНазовите часть перед первым подчеркиванием.J убрал также все подчеркивания в начале имени файла.Поэтому __SoftwareX__Y.zip переименовывается в SoftwareX.zip.

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

  • call /? ... объясняет %~dp0 ... диск и путь аргумента 0, который является путем к пакетному файлу, всегда заканчивающемуся обратной косой чертой.
  • dir /?
  • for /?
  • ren /?
0 голосов
/ 16 января 2019

Поскольку вы также пометили свой вопрос powershell, это будет способ PowerShell сделать это:

Get-ChildItem -Filter *.zip | Rename-Item -NewName { $_.Name -replace "_.*", ".zip" }

Короткая версия с использованием пакетных псевдонимов:

dir -filter *.zip | ren -new { $_.name -replace "_.*", ".zip" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...