Удаление строки из .CSV через пакетный скрипт - PullRequest
2 голосов
/ 10 апреля 2019

У меня есть более 80 уникальных файлов .csv, из которых мне нужно удалить первые 17 строк. Я новичок в написании пакетных скриптов, но хотел бы использовать эту возможность для обучения.

Мне удалось заставить этот пример кода работать для одного файла, когда я переименовываю файл в test.csv, но было бы предпочтительнее, если бы для имени файла я мог использовать «подстановочный знак».

@echo off
set "csv=test.csv"
more +17 "%csv%" >"%csv%.new"
move /y "%csv%.new" "%csv%" >nul

Файл сам по себе обновлен, и в нем НЕ указаны первые 17 строк, а имена переименовываются при запуске.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

попробуй так:

@echo off

for %%a in (*.csv) do (
    more +17 "%%a" >"%%a.new"
    move /y "%%a.new" "%%a" >nul
)
0 голосов
/ 10 апреля 2019

Вот пример, основанный на выводе For /?, упомянутом в моем комментарии.

Этот работает непосредственно в командной строке:

For %A In (*.csv)Do @More +17 "%A">"%A.new"&&Move /Y "%A.new" "%A">Nul

И это версия пакетного файла:

@For %%A In (*.csv)Do @More +17 "%%A">"%%A.new"&&Move /Y "%%A.new" "%%A">Nul

Команда, приведенная выше, практически идентична другому ответу.Единственным «реальным» отличием является использование условного оператора &&, который должен запускать команду Move только в том случае, если предыдущая команда More была успешной.Хотя маловероятно, что команда More потерпит неудачу, я все же предложил бы реализовать безопасность условного оператора. Если вам кажется, что вам не нужна эта дополнительная функция, не стесняйтесь выбрать ответ SachaDee (если он решит вашу проблему).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...