Как запустить несколько команд curl, каждая из которых находится в отдельном .txt файле в одной папке?

Вопрос или проблема

Если у меня есть определенная папка с несколькими .txt файлами, каждый из которых содержит одну команду curl в одной строке, я хочу просто указать на папку, после чего все эти команды запускаются разом, предпочтительно в порядке возрастания даты изменения их файлов и желательно, чтобы вывод каждой команды сохранялся в файл (только один файл для всех, с разделением формата между ними).

Я попробовал решение с .bat следующим образом, но файл (или команда) размером 8 кб не запускается корректно, несмотря на то, что я просто открыл .txt файл, в котором находится команда, и скопировал ее непосредственно в cmd, это работает:

@echo off
setlocal enabledelayedexpansion

:: Цикл по всем .txt файлам в текущей папке (исключая сам этот пакетный скрипт)
for %%f in (*.txt) do (

        set "cmd="
        
        :: Чтение содержимого каждого файла (например, 1.txt, 2.txt и т.д.)
        for /f "delims=" %%a in (%%f) do (
            set "cmd=!cmd! %%a"
        )
        
        :: Выполнение команды
         echo Выполнение: %%f
        cmd /c "!cmd!"


    )
)
pause
endlocal

Другие команды размером 3-4 кб работают хорошо.

Ответ или решение

Для выполнения нескольких команд curl, каждая из которых содержится в отдельном текстовом файле в одной папке, мы можем использовать пакетный файл (batch file) на Windows. За основу возьмем вашу начальную реализацию и внесем некоторые корректировки для более стабильной работы, особенно с длинными командами.

Вот пошаговое руководство, которое учитывает ваши требования:

Шаг 1: Создание .bat файла

Откройте текстовый редактор (например, Notepad) и вставьте следующий код:

@echo off
setlocal enabledelayedexpansion

:: Папка, содержащая файлы (вы можете изменить путь на нужный вам)
set "folder=."

:: Файл для сохранения вывода
set "outputFile=output.txt"
:: Очистка файла вывода перед началом
if exist "%outputFile%" del "%outputFile%"

:: Сортировка файлов по времени модификации и выполнение команд
for /f "tokens=*" %%f in ('dir /b /o-d "%folder%\*.txt"') do (
    set "cmd="
    :: Чтение содержимого файла 
    for /f "usebackq delims=" %%a in ("%%f") do (
        set "cmd=%%a"
    )

    :: Проверка на наличие команды
    if defined cmd (
        echo Executing: %%f >> "%outputFile%"
        echo !cmd! >> "%outputFile%"
        :: Выполнение команды с выводом в файл
        cmd /c "!cmd!" >> "%outputFile%" 2>&1
        echo ------------------------------------------------------ >> "%outputFile%"
    )
)

pause
endlocal

Шаг 2: Объяснение кода

  1. Установка параметров:

    • set "folder=." — вы можете указать конкретный путь к папке с вашими текстовыми файлами.
    • set "outputFile=output.txt" — задает имя выходного файла, в который будет записан результат выполнения команд.
  2. Очистка файла вывода:

    • Если файл назначения уже существует, он будет удален, чтобы избежать накопления старых данных.
  3. Цикл выполнения:

    • for /f "tokens=*" %%f in ('dir /b /o-d "%folder%\*.txt"') do — считываем файлы из директории, сортируя их по дате изменения (в порядке убывания).
  4. Чтение текста из файла:

    • Внутренний цикл считывает содержимое файла и сохраняет команду в переменной cmd.
  5. Выполнение команды:

    • Если команда существует (проверка if defined cmd), выполняем ее с помощью cmd /c "!cmd!" и перенаправляем вывод в файл.
  6. Разделитель:

    • После выполнения каждой команды добавляется разделительная линия для удобства чтения.

Шаг 3: Запуск .bat файла

Сохраните файл с расширением .bat, например, run_curl_commands.bat, и дважды щелкните на него для выполнения. Все команды, содержащиеся в текстовых файлах, будут выполнены, а результаты будут записаны в указанный файл output.txt.

Заключение

Использование этого подхода позволяет автоматически запускать команды curl, сохраняя результаты и упрощая управление выходными данными. Если у вас возникли дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...