2

Возможный дубликат:
Как я могу массово переименовать файлы из командной строки или с помощью стороннего инструмента?

У нас есть несколько файлов с именами файлов, аналогичными приведенным ниже:

Organizing_your_day_in_acute_care_-_Flash_(Medium)_-_20120516_12.04.02PM.mp4
Developing_a_Business_Plan_-_IT_Projects_-_Flash_(Medium)_-_20120529_09.39.09PM.mp4
GI_Medications_-_Flash_(Medium)_-_20120607_11.35.50AM.mp4
Effectiveness_and_Data_and_Information_Set_-_Flash_(Large)_-_20120208_02.41.28PM.mp4
Adult_Learning_-_Theory_-_Flash_(Medium)_-_20100519_05.25.02PM.mp4

Я хотел бы создать пакетный сценарий для переименования этих файлов, чтобы удалить все символы подчеркивания и удалить все, что находится после строки «_-_ Flash», оставив, по сути, файлы следующим образом:

Organizing your day in acute care.mp4
Developing a Business Plan - IT Projects.mp4
GI Medications.mp4
Effectiveness and Data and Information Set.mp4
Adult Learning - Theory.mp4

Любая помощь будет принята с благодарностью.

3 ответа3

1

Может быть проще сделать это в VBScript

Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder(".")
  ext = LCase(fso.GetExtensionName(f))
  If ext = "mp4" Then
    f.Name = Replace(Left(s, InStr(s, "_-_Flash")-1), "_", " ") & "." & ext
  End If
Next

или в PowerShell

Get-ChildItem -Filter *.mp4 | ForEach-Object {
  $newname = $_.Name -replace "_-_Flash.*(.mp4)", '$1'
  $newname = $newname -replace "_", " "
  Rename-Item $_.FullName $newname
}
1

Поскольку вы работаете в Windows, вы можете использовать всю мощь JScript + ActiveX для автоматизации практически любой задачи в JavaScript, и я лично считаю, что она выглядит чище.

Сохранить следующее где-нибудь как rename.js:

var shell = new ActiveXObject("Shell.Application")
var folder = shell.NameSpace("D:\\1\\test") // <--- your folder name here
// or interactive: var folder = shell.BrowseForFolder(0, "Select folder to clean-up", 0)
var items = folder.Items()
for (var idx = 0; idx < items.Count; idx++) {
   var file = items.Item(idx)
   var filename = file.Name
   var new_filename = filename.replace(/_\-_Flash_.*/, '').replace(/_/g, ' ')
   if (new_filename != filename) {
      file.Name = new_filename
      // You can uncomment next line if you run in console.
      // WScript.Echo(filename + ' -> ' + new_filename)
   }
}

И запустить либо с помощью wscript.exe (GUI), либо cscript.exe (консоль).

1

Этот .bat должен работать, но имейте в виду, что если у вас есть файлы, которые не соответствуют заданному шаблону имени файла, результаты будут непредсказуемыми:

setlocal EnableDelayedExpansion
FOR /F "usebackq delims==" %%i IN (`dir /b *.mp4`) DO (
    set oldfilename=%%i
    set oldfilename=!oldfilename:^(=!
    set oldfilename=!oldfilename:^)=!
    set endbit=!oldfilename:*_-_Flash=_-_Flash!
    call set newfilename=%%oldfilename:!endbit!=%%
    set newfilename=!newfilename:_= !
    rename "%%i" "!newfilename!.mp4")
endlocal

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .