Как удалить (разные) суффиксы на физическом файле - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть несколько файлов с длинными суффиксами в папке на рабочем столе. Я написал функцию JavaScript, которая удаляет суффиксы и возвращает сокращенное имя файлов. Как получить JavaScript для распознавания имен файлов в папке? Каждый раз будут разные файлы.

Я протестировал функцию в repl.it и получил требуемый вывод. Я планирую использовать Jaxascript моего Mac для запуска JavaScript для достижения этой цели.

Я искал, как получить javascript для распознавания имени файла, но исследования указывают только на URL сети, а не на локальные имена файлов.

const suffix = ["_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits", "_hd_mov-proresHQ422-vpal_a16x9 ProRes 422HQ 1080/25p; PCM 1152kbps 48kHz 24bits", "_hd_mxf-xdcam422_vpal_a16x9 XDCAM HD422 1080/50i; PCM 768kbps 48kHz 24bits"];

function testFile(myString) {
let replaceSuffix = "";
let result = "";
for (let x of suffix) {
  if (myString.includes(x)) {
    result = myString.replace(x, replaceSuffix);
  }
}
  return result;
}
console.log(testFile("Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov"));

console.log(testFile("Banana_F002_hd_mov-proresHQ422-vpal_a16x9 ProRes 422HQ 1080/25p; PCM 1152kbps 48kHz 24bits.mpg"));

console.log(testFile("Carrot_F003_hd_mxf-xdcam422_vpal_a16x9 XDCAM HD422 1080/50i; PCM 768kbps 48kHz 24bits.avi"));

В идеале я бы хотел, чтобы это произошло: - Длинное имя файла (Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768 кбит / с, 48 кГц, 16 бит / мин) добавлено в папку автомата,

  • AppleScript (запускает JavaScript) поднимает его, удаляет суффикс

  • файл переименован в сокращенное имя файла (Apple_F001.mov)

Отсутствующая ссылка заставляет javascript установить имя файла в качестве аргумента функции и вывести результат javascript в физический файл.

1 Ответ

0 голосов
/ 17 апреля 2019

Один из способов решения вашей проблемы - сохранить HashMap (он же словарь или карта).

Допустим, имя файла равно Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov

Затем,Вы можете сохранить карту, где Apple_F001.mov - это ключ, а значение - это его исходное имя Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov.

. Далее, я предполагаю, что все файлы будут иметь одинаковый формат:

  • Если это так, мы можем создать регулярное выражение для извлечения первого слова, следующего за первым буквенно-цифровым значением, а затем расширения, чтобы создать ключ.

  • Если они этого не сделают, тогда нужно принять какое-то суровое решение.Мой совет - выбрать несколько символов, чтобы вы могли использовать подстроку метода, а затем объединить их с расширением.

// So let say these are the filenames
var filenames = [
  'Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov'
  , 'Banana_F002_hd_mov-proresHQ422-vpal_a16x9 ProRes 422HQ 1080/25p; PCM 1152kbps 48kHz 24bits.mpg'
  , 'Carrot_F003_hd_mxf-xdcam422_vpal_a16x9 XDCAM HD422 1080/50i; PCM 768kbps 48kHz 24bits.avi'];

var fileMap = {};

for (filename in filenames){
  const regex = /^([A-Za-z]+_[A-Z0-9]+)_\w[\w ;\-\/]+(\.\w+)/gm;
  var tokens = regex.exec(filenames[filename]);
  if (null != tokens){
    var key = tokens[1].concat(tokens[2]);
    var value = tokens[0];
    fileMap[key] = value;
  }
}

console.log(fileMap);

Результат:

{
  "Apple_F001.mov": "Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov",
  "Banana_F002.mpg": "Banana_F002_hd_mov-proresHQ422-vpal_a16x9 ProRes 422HQ 1080/25p; PCM 1152kbps 48kHz 24bits.mpg",
  "Carrot_F003.avi": "Carrot_F003_hd_mxf-xdcam422_vpal_a16x9 XDCAM HD422 1080/50i; PCM 768kbps 48kHz 24bits.avi"
}

Теперь вы можете использовать клавишу для отображения короткого имени файла и отслеживать реальное имя файла, которое вы будете использоватьиспользуйте позже для доступа.

Объяснение

Регулярное выражение /^([A-Za-z]+_[A-Z0-9]+)_\w[\w ;\-\/]+(\.\w+)/gm говорит, что нужно извлечь значения, совпадающие с указанными в скобках, в данном случае ^([A-Za-z]+_[A-Z0-9]+).Символ ^ говорит о том, что он будет «начинаться с», круглые скобки означают, что мы извлечем информацию, [A-Za-z]+ означает одну или несколько только буквенных символов, [A-Z0-9]+ означает только заглавные буквы и цифры, а (\.\w+) означает, что мыполучить что-нибудь после точки (включительно).

Мы повторяем имена файлов и выполняем регулярное выражение regex.exec(filenames[filename]) для каждого из них, чтобы извлечь массив токенов.Первый токен, с индексом 0, его полное соответствие (вся строка, которая соответствует критериям), второй токен с индексом 1 взят из первой круглой скобки ^([A-Za-z]+_[A-Z0-9]+), которая является именем файла, и третьего токена,в индексе 2 соответствует второй круглой скобке (\.\w+) для имени файла.

Затем мы создаем пару ключ / значение и добавляем ее в карту с именем fileMap fileMap[key] = value;

Позвольте мнезнать, если у вас есть вопросы.

...