2016-03-10 11 views
1

У меня есть группа из .csv файлов, которые генерируются извне и отправляются мне периодически. каждый из них содержит одну строку текста с 31 "столбцами". Однако ни у одного из них нет никакого EOL (без LF отдельно или с CR), поэтому, когда я пытаюсь объединить любой из этих файлов, я получаю больше столбцов в одной строке вместо строки для каждого файла.пакетный файл/автоматизация для добавления LF и CR (EOL) в конец нескольких CSV-файлов

Я хотел бы, чтобы это было автоматически добавлено в конец каждого из этих файлов в пакетном режиме, причем выходы имеют одинаковое имя файла как исходный файл, потенциально с добавлением символа в начале имени поэтому я новый этот процесс был завершен. Ex: originalFile.csv>> 1_originalFile.csv.

Я попытался создать файл под названием «eol.csv», который был просто (LF и CR), и создать пакет, который добавит это к концу всех моих файлов, но поскольку я начинаю писать партию файлов, я был значительно неудачен.

Если бы это было возможно для выполнения в каждом файле, как если бы оно было занесено в папку, это было бы еще лучше.

Спасибо за любые мысли!

+3

Вы должны иметь возможность просто «эха». >> originalFile.csv' – SomethingDark

+0

спасибо! так что будет такая партия? 'Для файла в * csv; do эхо. >> «$ file» done.' – drumtechjp

+0

Также рекомендуется оценить любые попытки вашего собственного кода, так как этот сайт в основном помогает с ошибками в коде, но в целом люди все равно помогут и не забудьте «проверить» ответьте, что вы думаете, решает или помогает больше всего. – Bloodied

ответ

1

Это поиск всех .csv имен файлов для строки _fixed, и на всех, кто не имеет этого, вставляет пустую строку и переименовывает ее. Конечно, замените pathToWherever на правильный путь для вас, и можно добавить опцию /s, чтобы разрешить поиск в подпапках по именованному пути.

@echo off 
for /r "C:\pathToWherever\" %%G in (*.csv) do (
    echo %%G | findstr /c:"_fixed" || (
     echo:>>%%G 
     ren "%%G" "%%~nG_fixed.csv" 
    ) 
) 
+0

Это сработало хорошо, спасибо! ... как только я понял, что папка, которую я использовал в качестве теста, «- копировать» в конце, который при вставке непосредственно в код явно не соответствовал ожиданию, поскольку он видел копию как функцию. После переименования папки все работало должным образом! – drumtechjp

+0

@drumtechjp - как написано, этот код добавляет нежелательное пространство для линии. Легко фиксируется путем удаления пространства для e перенаправление. Но см. [Мой ответ] (http://stackoverflow.com/a/35930672/1012053) для еще более простого решения, которое позволяет избежать переименования любых файлов. – dbenham

+0

@dbenham ah, имея пробел перед перенаправлением, является привычкой избегать странностей об эхо-сигнале всего или просто ошибках и т. Д., Которые, вероятно, здесь не нужны, но я никогда не сломаюсь, спасибо, что указали это. – Bloodied

1

Поскольку все echo сек конца в CRLF, и вы можете использовать echo/ эхо в CLRF сам по себе, вы можете просто использовать перенаправление вывода для добавления CLRF к каждому из CSV-файлов.

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

@for %%A in (%*) do echo/ >>%%A 

Это одна строка весь сценарий, кстати ,

+1

Вы не должны использовать 'echo.' для вывода пустых строк и, конечно же, никогда не предлагать новичкам использовать его.Я использую 'echo /' для пустых строк и 'echo (% var%', когда «var» может быть пустым или содержать значение _any_, даже «/?». Detais [здесь] (http://www.dostips.com/ forum/viewtopic.php? t = 774) и на нескольких сообщениях по этой теме здесь и там ... – Aacini

+0

Хорошо, исправлено ... – SomethingDark

+1

Как написано, это добавляет нежелательное пространство в конец строки. Легко фиксируется удалением пространство перед перенаправлением. Но вы ничего не сделали, чтобы предотвратить «фиксированный» файл несколько раз. – dbenham

4

Регулярное выражение FINDSTR $ распознает конец строки в качестве позиции непосредственно перед возвратом каретки. Таким образом, findstr /v $ будет соответствовать линиям, не содержащим возврат каретки. Вы можете использовать этот факт для добавления возврата каретки/перевода строки в только нужные ему файлы без переименования каких-либо файлов.

Следующий один вкладыш из командной строки все, что вам нужно:

for /f "eol=: delims=" %F in ('findstr /m /v $ *.csv') do @(echo()>>"%F" 

удвоиться проценты, если поместить команду в пакетном сценарии.