Aditya_ETL Ответов: 1

Промежуток времени выполнения двух команд DOS (пакетный скрипт)


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

Ниже Кода:

СКОПИРОВАТЬ \CDFS23001\\ИСТОЧНИК\ОРГ\*СЧЕТА*.XML-код \\CDFS23001\\источник\ТГТ\

dir /b \\CDFS23001\\SOURCE\TGT\*ACCOUNTS*.xml > \\CDFS23001\\SOURCE\TGT\List_Accounts.txt

Сначала команда copy копирует файл из папки ORG в папку TGT, а затем создается список имен файлов.

Иногда ... List_Accounts.txt не имеет никакого имени, несмотря на то, что файл учетных записей присутствует в расположении организации.

Возможно ли, что до того, как файл(ы) будет полностью скопирован в папку TGT (destination) командой COPY, будет выполнена вторая команда dir /b ?

Если это происходит, что я могу сделать, чтобы иметь некоторое время ожидания между этими двумя командами ?

Пожалуйста предложите

Что я уже пробовал:

Я думаю, что Timeout 60 создаст временной разрыв в 60 секунд, но в случае, если для копирования файлов потребуется больше времени, он тоже может потерпеть неудачу. Размер файлов никогда не фиксируется.

Richard Deeming

Какие-нибудь файлы скрыты? Попробуйте добавить /a флаг вам в руки dir вызов.

dir /a /b \\CDFS23001\\SOURCE\TGT\*ACCOUNTS*.xml > \\CDFS23001\\SOURCE\TGT\List_Accounts.txt

Aditya_ETL

Нет, скрытых файлов нет, я думаю, что когда размер файла составляет около 20 МБ, то перед тем, как команда copy полностью скопирует файл в пункт назначения, команда dir будет выполнена и geneartes пустой список файлов. Но я не уверен, что это действительно происходит.
Есть ли какой-нибудь способ убедиться, что сначала файл будет скопирован полностью, а затем должен выполняться только dir ?

Richard Deeming

Как сказал Дэйв, copy команда не возвращается до завершения операции копирования.

Могут ли файлы быть нулевой длины? copy не буду копировать их - вам нужно будет использовать xcopy вместо.

копия | документы Майкрософт[^]

Если вы хотите попробовать сделать паузу между операциями, просто на случай, если есть что-то странное с оборудованием, то вы можете использовать то timeout команда[^].

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Это не проблема времени.

Это орфографическая проблема. Посмотрите на свои "счета" в одной строке и "счета" в следующей.


Aditya_ETL

Привет, Дэйв, это была не орфографическая ошибка, опечатка и пропущенная буква.
Можете ли вы предложить решение

Dave Kreskowiak

Хорошо, вы обновили это в вопросе, но это все еще не проблема времени.

Команда копирования в первой строке-это "блокирующий вызов". Это означает, что следующая строка не будет выполняться до тех пор, пока команда copy полностью не скопирует все файлы.

Есть ли в этих именах файлов пробелы?

Приведите примеры имен файлов, с которыми вы имеете дело.

Aditya_ETL

Пример файла: Netsol_ACCOUNTS_20180215.xml

Dave Kreskowiak

Хорошо, учитывая то, что вы опубликовали, в этом нет ничего плохого. Эти команды будут работать и выводить список файлов в текстовый файл при условии, что они выполняются под учетной записью, имеющей соответствующий доступ к соответствующим общим ресурсам и папкам.