Как создать цикл / пропустить в пакетном режиме - PullRequest
0 голосов
/ 08 февраля 2011

Я пытаюсь загрузить часть файлов из приложения. Командой оболочки для него является 'go filename download'.

У меня есть текстовый файл, содержащий все имена файлов, которые я должен загрузить. Все, что я хочу сделать, это запустить скрипт / команду так, чтобы при выполнении вышеуказанной команды 1. имена файлов выбираются из текстового файла и выполняются с помощью вышеуказанной команды 2. существующие файлы / недоступные файлы пропускаются 3. затем процесс продолжается со следующими файлами в списке

Пока у меня есть идея использовать такой оператор, как go $ download , а затем передать оператору текстовый файл со списком имен файлов. Заранее спасибо.

1 Ответ

2 голосов
/ 08 февраля 2011

Для Windows вы можете использовать for /f для обработки файла и создания команды из него.Следующий скрипт supergo.cmd показывает, как это можно сделать:

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "delims=" %%f in (list.txt) do (
    echo go "%%f" download
)
endlocal

Следующие транскрипты показывают это в действии:

C:\Pax> type list.txt
file1.txt
file number 2.txt
another file.jpg

C:\Pax> supergo
go "file1.txt" download
go "file number 2.txt" download
go "another file.jpg" download

Если вы используете оболочку типа bashВы можете использовать sed для создания временного сценария из входного файла, а затем выполнить следующее:

#!/bin/bash
sed -e "s/^/echo go '/" -e "s/$/' download/" list.txt >/tmp/tempexec.$$
chmod u+x /tmp/tempexec.$$
. /tmp/tempexec.$$
rm -rf /tmp/tempexec.$$

Это ставит echo go ' в начале каждой строки, ' download в конце,затем помечает его как исполняемый и выполняет.

В обоих случаях (Windows и bash) удалите echo, чтобы заставить его выполнять реальную работу.

...