Мне нужен эквивалент команды оболочки xargs < list.txt cat -- > compiled.txt в виде командного файла Windows.

Есть каталог, полный текстовых файлов (от 50 до 500 файлов), которые мне нужно объединить в один файл. Порядок важен. Файлы не могут быть названы в асцибетическом порядке, потому что естественный порядок не является порядком, который должен быть скомпилирован в целевом файле.

У меня была идея назвать исходные файлы, такие как $DISREGARD1_$SECOND-ORDER_$FIRST-ORDER_$THIRD-ORDER_$DISREGARD2.txt и создать вуду с этим, но я думаю, что для моего случая использования это проще и менее изменчиво для поддерживать упорядоченный список. Слияние с списком очень просто с помощью xargs и cat. Как мне сделать это с файлом .bat в Windows?

Он мне нужен как идемпотентный командный файл, чтобы пользователь мог щелкнуть по нему. В целевом файле не должно быть никакого вывода команды, лишних возвратов каретки или чего-либо еще, чего нет в источниках (например, как если бы файлы были двоичными).

Бонусный вопрос: Было бы замечательно разрешить замечания в файле списка (пустые строки не допускаются, чтобы ограничить сложность). Я бы сделал это на оболочке с чем-то. как grep -v ^# < list.txt | xargs cat -- > compiled.txt . Есть ли шанс получить это в файл .bat?

2 ответа2

2

Используйте цикл for:

@echo off

( for /f "tokens=*" %%i in (list.txt) do type "%%~i" ) > compiled.txt
2

Это должно сделать это:

@echo off
REM create empty result file
copy nul results.txt /y

REM iterate over list skipping #entries and copy binary
for /f "usebackq delims=" %%F in (`findstr /R /V "^#" list.txt`) do (
 copy /b results.txt+"%%~F" results.txt 
)

Синтаксис в виде командного файла, если вы хотите выполнить непосредственно из строки cmd, измените %%F на %F

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .