2016-02-03 3 views
0

Я хочу создать .bat-файл, который будет содержать последнюю строку из всех CSV-файлов, имена которых начинаются с «Togo». Пакетный файл будет находиться в той же папке, что и CSV-файлы. Для вывода должен быть: [имя файла] [Последняя строка данных]Пакетный файл, который анализирует и представляет данные из файлов csv

Этот пакетный файл всегда должен работать и проверять файлы .csv каждые 5 минут.

+2

Попробуйте задать вопрос: http://stackoverflow.com/help/mcve – ceving

+0

Я начинающий и не знаю, должны были начаться, это не тот ответ, который я искал ... – user2007221

ответ

1

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

Это, как было сказано, трудно запустить в пакетном режиме, так что вот решение.

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\t w o" 
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\togo*.csv" ' 
) DO (
FOR /f "usebackqdelims=" %%q IN ("%sourcedir%\%%a") DO SET "line=%%q" 
ECHO %%a !line! 
) 

GOTO :EOF 

Первые две строки отключить дисплей отладки Batch (в шоу-The-команда, а затем выполнить его) и вызвать режим, в котором доступ к переменным, которые были изменены в «блоке кода» (в скобки последовательность команд) (как правило, он отключен, и доступно только значение в момент, когда встречается if (или что-то еще).)

Строка 3 задает переменную с именем sourcedir и присваивает ей значение. Прилагаемые кавычки гарантируют, что конечные пробелы не включены в назначенное значение. Я сознательно использовал имя каталога, которое включает пробелы, потому что это обычная проблема, и это доказывает пакет в моем тестовом режиме. Имя вашего каталога будет другим - просто замените это. Адрес . означает «текущий каталог»

Линии 4-6 могут быть объединены в один - только стилистика. Это означает «выполнить сканирование каталогов, без имен каталогов (/a-d) в базовой форме (/b), то есть, только имена, каталога, имя которого находится в переменной sourcedir и имена которых соответствуют шаблону togo*.csv. Обработать каждую результирующую строку на игнорируя разделители по умолчанию и присваивая результат (т. е. всю строку списка каталогов, то есть имена файлов), к метапеременной (переменная управления контуром) %%a.

Следующая строка считывает каждую строку файла, построенного из источника имя директории и имя файла в настоящее время в %%a. delims установлено в ничего, поэтому вся строка будет назначена метаобменимой %%q и usebackq указывает cmd, что строка в скобках - это имя-кавычка, а не строка (или однокомандная команда для выполнения, как в первом for.) Затем переменная line будет установлена ​​с каждой последовательной строкой из файл, поэтому ;ine будет иметь последнюю строку из файла, когда заканчивается for...%%q....

Следующая строка показывает имя файла в %%a и текст из последней строки этого файла в line.

Обратите внимание на разницу - %%x, чтобы получить доступ к содержимому из метапеременных, %var%, чтобы получить доступ к содержимому переменного, но !var! для доступа к измененному значению (если delayedexpansion был вызван).

goto :eof означает «идти к физическому конца-файлу» CMD понятному :eof означает «физический конец-файл»

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

*whatever* 

В общем,

for /? 

будет у ield help для команды for, и это относится к большинству командных команд. Посмотрите на SO за тысячами примеров.

Вы также можете исследовать

timeout 
cls 
choice 

для подсказки о том, как достичь вашей every 5 minutes амбиции. Возможно, вы захотите запустить это из планировщика задач, чтобы получить дисплей every 5 minutes - множество способов добиться того же.

Смежные вопросы