Дія автоматизатора не постачається з необхідними даними


4

Я намагаюся зробити наступне в робочому процесі автоматизатора:

  1. Запитайте елементи Finder з папки A
  2. У папці A додайте суфікс до імен файлів
  3. Скопіюйте їх у папку B
  4. У папці B за допомогою AppleScript розділіть назву файлу за роздільником, а потім перейменуйте файл другою половиною тексту
  5. У папці B додайте префікс до імен файлів
  6. У папці B додайте суфікс до імен файлів

Ось зразок назв файлів, які я намагаюся перейменувати:

  • новий файл $ SG789.jpg
  • file_2 $ 123-456.jpg
  • ім'я файлу $ LG123.jpg
  • this_file $ 558-432.jpg

Розмежувачем, на який я розбиваюсь, є знак "$", щоб створити такі нові файли:

  • SG789.jpg
  • 123-456.jpg
  • LG123.jpg
  • 558-432.jpg

Це формати імен файлів, які я хотів би, щоб автоматизатор продовжував обробляти.

Завдяки іншому користувачеві я зміг досягти цього далеко. Однак на кроці 5. мій робочий процес не працює, я отримую таке попередження:

Дія "Перейменування елементів пошуку": Додати текст "не була надана з необхідними даними.

Ось настройка робочого процесу в Automator:

введіть тут опис зображення

З AppleScript нижче:

 on run {input, parameters}
     try
        set AppleScript's text item delimiters to "$"
        set output to {}
        repeat with anItem in input
            set the end of output to text item 2 of (anItem as text)
        end repeat
        set AppleScript's text item delimiters to {}
        return output
    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} ¬
            default button 1 with icon caution
        set AppleScript's text item delimiters to {}
        return
    end try
end run

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

Як повернути висновок, щоб наступний елемент робочого процесу міг використовувати його та продовжувати перейменування файлу?


Ви сказали: " Я думав, що повернувши вихідний результат, наступний робочий процес підбере і продовжить необхідні зміни. Я бачу, що це не так ", і те, що повертається дією AppleScript, - це лише список імен файлів, а не цілком кваліфіковані імена шляхів, і хоча його можна змінити, щоб повернути FQP, він все одно не працюватиме з наступною дією, оскільки це лише список текстових рядків, а не об'єкти файлової системи, як передано до дії AppleScript. У дії AppleScript FSO були примушені до текстових рядків, щоб обробити їх як текстові елементи, тобто (anItem as text).
користувач3439894

Ви сказали: " Як повернути свій вихід, щоб наступний елемент робочого процесу міг використовувати його і продовжувати перейменування файлу? ", Я не знаю, чи є спосіб досягти того, що ви намагаєтеся зробити з дією AppleScript. Однак, чому ви змінюєте оригінальні файли перед їх копіюванням, це просто не має сенсу. Я б поміняв місцями Перейменувати елементи пошуку: додав текст із елементами пошуку копію. У всякому разі, мені незрозуміло, чому ти переживаєш стільки різних кроків, якщо все, що ти намагаєшся, - це перейменувати файл, наприклад, a new file$SG789.jpgна SG789.jpg.
користувач3439894

Я, мабуть, вирішив би зробити це за допомогою скрипту bash, IMO це було б набагато простіше і ефективніше. Інший варіант - отримати FSO, передати їх на дії AppleScript і програмно зробити все інше, що потрібно зробити FSO в коді AppleScript . (Що, звичайно, знадобиться додаткове кодування.)
user3439894

@ user3439894 Дякую за пояснення. Це має сенс.
Язьмін

@ user3439894 Причина, по якій я змінюю оригінали, полягає в тому, що мені потрібно вести облік файлів, які оброблялися, оскільки мій робочий процес викреслює ім’я та просто залишає те, що схоже на випадкові символи. Якщо у вас є альтернативна пропозиція відстежувати вже оброблені вихідні файли, я відкритий для пропозицій.
Язьмін

Відповіді:


5

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

Перший робочий процес автоматизатора

  • Розбитий на два робочих сегменти:

Перший сегмент:

  • Запитайте предмети пошуку
  • Перейменуйте елементи пошуку: додайте текст
  • Копіювання елементів пошуку
  • Запустіть сценарій оболонки
    • Налаштування: Shell: bin / bash та Pass input: як аргументи
      • Замініть код за замовчуванням на код нижче.
      • Це те, що використовується для видалення до та включення $ до базового імені файлу .

Код для Run Shell Script дій :

cd "$(dirname "$1")"
for f in "$@"
do
    mv "$(basename "$f")" "$(printf "$(basename "$f")" | sed -E 's/^.*\$//')"
done
echo "$(ls -1)"
  • Примітка: echo "$(ls -1)" команда не є дійсно необхідною в цьому прецеденті і була використана в даному прикладі, щоб показати імена файлів були змінені і показати , що в результатах панелі .

  • Оновлення: Новий код Run Shell Script дій :

    Використовуйте цей код замість оригінального коду , вище. Я змінив це, щоб бути дещо ефективнішим, коли потрібно дзвонити basenameодин раз, а не два рази. (Я не оновив код в Run Shell Script дії в оригінальному документі нижче.)

    cd "$(dirname "$1")"
    for f in "$@"; do
        n="$(basename "$f")"
        mv "$n" "$(printf "$n" | sed -E 's/^.*\$//')"
    done
    echo "$(ls -1)"
  • Примітка. Див. Також другий робочий процес Автоматизатора , показаний після вихідного зображення нижче, що заперечує необхідність у другому сегменті:, оскільки його дія Run Shell Script кодується для обробки перейменування, яке відбувається у другому сегменті, додаючи та заміняючи на . prefix--proc-suffix


Другий сегмент:

  • Запитайте предмети пошуку
    • Параметри: [√] Ігнорувати введення цієї дії
      • Перевіривши цю опцію, ви побачите, що на зображенні нижче знайдено потрібний відключення між попередньою дією та цією.
  • Перейменуйте елементи пошуку: додайте текст
  • Перейменуйте елементи пошуку: додайте текст

Інші застосовні налаштування дій Автоматизатора див. На зображенні нижче , як показано в ОП.

Як ви бачите на зображенні нижче, всі дії успішно виконані та виконані так, як запрограмовано, в області результатів кожної дії відображаються результати її дії .


Перший робочий процес автоматизатора



Другий робочий процес автоматизатора

Використовується замість першого робочого процесу Автоматизатора.

  • Запитайте предмети пошуку
  • Перейменуйте елементи пошуку: додайте текст
  • Копіювання елементів пошуку
  • Запустіть сценарій оболонки
    • Налаштування: Shell: bin / bash та Pass input: як аргументи
      • Замініть код за замовчуванням на код нижче зображення.

Другий робочий процес автоматизатора

  • Результати перших трьох дій в цьому другому Automator процесу є точно такий же , як показано в першому робочому процесі вище, тому я залишив Результати панелі приховані для цих дій . Тим НЕ менше, результати панель для Run Shell Script дій показує результати розшукуваних.

Код для Run Shell Script дій в Workflow Другий Automator:

p='prefix-'
s='-suffix'
t='-proc'

cd "$(dirname "$1")"
for f in "$@"; do
    n="$(basename "$f")"
    if [[ $n =~ ^.*\$.*${t}\.${n##*.} ]]; then
        mv "$n" "${p}$(printf "${n%.*}" | sed -E -e "s/$t/$s/" -e 's/^.*\$//').${n##*.}"
    fi
done
echo "$(ls -1)"
  • Примітка до оновлення. Я змінив код , розмістивши присвоєння змінної поза for циклом , оскільки це єдиний код, який вам потрібно буде / хочете змінити за необхідності (і вони не повинні бути в for циклі ). Я не оновлював зображення робочого процесу Automator, щоб відобразити це оновлення.

Ви можете, якщо потрібно / захотіли, додати інший другий сегмент до цього другого робочого процесу , але код у цій дії сценарію запуску оболонки виключає потребу в двох елементах пошуку перейменування: додайте текстові дії, які були у другому сегменті першого ( оригінал), робочий процес .

Примітка: Я буду оновлювати це з поясненням того , що код робить в Run Shell Script дію , як тільки зможу.


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

@Yazmin, я ще не встиг оновити відповідь з поясненням того, що робить код у скрипті bash , але як тільки я отримаю можливість. Досить сказати , що ви повинні мати тільки змінити значення трьох змінних p , sі tпри необхідності / хотів. Решту коду не потрібно змінювати.
користувач3439894

@Yazmin, Примітка оновлення: Я змінив код у другому робочому процесі автоматизатора , розмістивши присвоєння змінних поза for циклом , оскільки це єдиний код, який вам потрібно буде / хочете змінити за необхідності (а вони не потрібно знаходитися всередині for циклу ). Я не оновлював зображення робочого процесу Automator, щоб відобразити це оновлення.
користувач3439894
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.