Я добавил пакетный файл в меню "Отправить", которое щелкнуло правой кнопкой мыши, которое открывает командную строку в текущем каталоге. Команда для объединения всех TXT-файлов в этой папке и любых подпапках не выполняется должным образом при использовании из пакетного файла (создает 0-байтовый файл с именем output.txt), но работает правильно, если я ввожу его в cmd незамедлительный.

%~d1
cd "%~p1"
start cmd.exe /K 
"for %f in (*.txt) do type "%f" >> output.txt"

Windows 10. Любая помощь приветствуется. Благодарю.

отредактируйте взгляд здесь, удвойте кортежи по некоторым причинам:https://stackoverflow.com/questions/11711569/windows-batch-file-concatenate-all-files-in-subdirectories

2 ответа2

1

Могут ли помочь следующие стартовые файлы .reg и командный файл:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Run Batch script]
@="&Run text file concatenate"

[HKEY_CLASSES_ROOT\Directory\shell\Run Batch script\command]
@="\"E:\\menu.bat\" \"%1\""

Пакетный файл "E:\menu.bat":

@ECHO OFF
cd  %*
forfiles /s /m *.txt /c "cmd /c type @path >> %*\output.txt
1
  • Пакетные файлы требуют двойных знаков процента с использованием переменных.
  • Как я вижу, нет необходимости в CMD / K,
  • ваша команда не вернулась в подкаталоги
  • Вы должны избегать обработки только что сгенерированного файла output.txt и (повторно) инициализировать его при последующих запусках.

Измените партию на это:

@Echo off
Pushd "%~dp1"
Type Nul >output.txt
for /F "delims=" %%f in (
  ' Dir /B/S/A-D *.txt ^|find /v /i "output.txt" '
) do type "%%f" >> output.txt

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