Как мне объединить файлы по порядку - PullRequest
0 голосов
/ 22 декабря 2018

Я нашел / нашел пакетный скрипт Windows, который будет объединять CSV-файлы из всех подкаталогов.Он отлично работает в Windows 10, но когда я запускаю скрипт в Windows 7, все файлы вышли из строя.Как заставить порядок, в котором объединить файлы CSV?

echo @off
for /r %%i in (*.csv) do (
if not %%~nxi == output.csv (
echo %%~nxi >> output.csv
echo %%i
echo %%~nxi
type "%%i" >> output.csv
echo. >> output.csv
echo. >> output.csv
)
)

Ответы [ 4 ]

0 голосов
/ 27 декабря 2018

Спасибо всем вам за помощь.Прочитав все ответы, я понял, что могу обойти проблему сортировки окон, отсортировав во второй файл и затем прочитав его оттуда.

dir /b /s /O:N *.csv | sort > file.txt
for /f %%A IN (file.txt) do (
if not %%~nxA == output.csv (
echo %%~dpnxA
echo %%~nxA >> output.csv
type %%A >> output.csv
echo. >> output.csv
echo. >> output.csv
)
)

Еще раз спасибо за вашу помощь.

0 голосов
/ 22 декабря 2018

Вот еще одно возможное решение:

@echo off

for /R %%A IN (*.csv) do (
     if not "%%~nxA"=="output.csv" (
           (echo %%~fA && type "%%~fA" && echo. && echo.)>>output.csv
           echo Processed: %%A
           echo %%~nxA
     )
)

с гораздо меньшим количеством кода.

  • Использование опции /R с for для циклического перемещения по подпапкам в %cd%.
  • Мы хотим проанализировать ВСЕ csv файлы, поэтому мы указываем это в скобках с (*.csv).
    • Затем мы проверяем, является ли csv файл, обрабатываемый в данный момент, output.csv.
      • Если нет, тогда мы добавляем полный путь файла csv ("%%~fA"), его содержимое (type "...") и две новые строки (echo.) до output.csv.Это условие на самом деле не требуется, но добавлено, чтобы быть в теме с вопросом. Также, если вы не хотите добавлять полный путь к output.csv, но имя файла и расширение только просто замените %%~fA на %%~nxA.
      • После этого мы отображаем текущий обработанный файл, его имя и расширение.

      • Если файл, обрабатываемый в данный момент , равен output.csv, то мы повторяем цикл.
  • Теперь output.csv содержит содержимое всех csv файлов во всех подкаталогах.

Итак, теперь откройте новый cmd и введите следующие команды.Внимательно прочитайте вывод:

  • for /?
  • if /?
  • echo /?
  • type /?

Некоторые предложения для дальнейшего чтения:

0 голосов
/ 23 декабря 2018

Это всего лишь небольшое изменение ответа военнопленного , которое должно повысить производительность.Эта техника держит файл открытым для записи.Когда вы используете append несколько раз, он открывает и закрывает выходной файл.Таким образом, указатель файла должен сбрасываться каждый раз, когда он выводится в файл.

@echo off
(FOR /F "usebackq delims=" %%i IN (`dir /s /b /O:N *.csv`) do (
    echo %%~nxi
    echo %%i >con
    type "%%i"
    echo.
    echo.
)
)>output.tmp
rename output.tmp output.csv
0 голосов
/ 22 декабря 2018

Небольшое изменение в вашем коде сделает эту работу:

@echo off
FOR /F "usebackq delims=" %%i IN (`dir /s /b /O:N *.csv`) do (
    if not "%%~nxi" == "output.csv" (
        echo %%~nxi >> output.csv
        echo %%i
        echo %%~nxi
        type "%%i" >> output.csv
        echo. >> output.csv
        echo. >> output.csv
    )
)

Смысл в том, чтобы использовать другую команду out - используйте dir для управления порядком сортировки.
/b для чистого вывода по dir
/O для заказа, N - name.
проверьте FOR /? и dir /? для получения более подробной информации.

PS: вы можете использовать:

echo %%~dpnxi >> output.csv

вместо строки 4 echo %%~nxi >> output.csv, чтобы показать полный путь каждого файла в вашем файле output.csv.

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