Прочитайте текстовый файл и получите его имя в пакетном режиме - PullRequest
0 голосов
/ 08 ноября 2019

Прочитайте текстовый файл и получите его имя в пакете

Я попробовал ниже. Я получаю содержимое, но не имя файла.

type *.txt > newfile.txt
for %f in (*.txt) do type "%f" >> output.txt

Выходной файл содержит содержимое из нескольких файлов

12
324
3243
45
5645
6

Ожидаемый вывод:

Filename1.txt
12
324
3243
Filename2.txt
45
5645
Filename2.txt
6

[Edit /] Похоже, что ожидаемый результат, (еще не подтвержден) действительно:

Filename1.txt
12
324
3243
Filename2.txt
45
5645
Filename2.txt
6

Ответы [ 3 ]

1 голос
/ 10 ноября 2019

type имеет неожиданную привычку: он записывает имена файлов в STDERR, а содержимое файла в STDOUT. Если вы хотите перенаправить и в файл, вам нужно перенаправить STDOUT (>) и STDERR (2>&1 = "в то же место назначения, что и STDOUT"):

type *.txt >newfile.tmp 2>&1
move /y newfile.tmp newfile.txt

Присвоение имени целевому файлу .txt также приводит к вводу текста (полученный файл будет содержать две копии некоторых ваших файлов). Поэтому я перенаправляю в файл .tmp и переименовываю его позже.

0 голосов
/ 10 ноября 2019

Я не смог получить результат, который искал. Вместо этого я пошел другим путем, где я добавил имя файла в первую ложь каждого текстового файла, а затем

type *.txt > output.txt 

Ниже приведена команда, которую я использовал для добавления имени файла в первую строку каждого текстового файла

for %%I in (*.txt) do (echo %%~nI>"%TEMP%\FileName.tmp"
    echo/>>"%TEMP%\FileName.tmp"
     copy /B "%TEMP%\FileName.tmp" + "%%~I" "%%~I.tmp">nul
  del "%%~I"    ren "%%~I.tmp" "%%~nxI")
del "%TEMP%\FileName.tmp" 2>nul
0 голосов
/ 08 ноября 2019

Я полагаю, вы хотите что-то вроде этого:

for %_ in (
 "C:\Folder\*.txt"
) do (
  ECHO=
  ECHO==============================================
  ECHO== Begin File: %~nx_
  ECHO==============================================
  ECHO=/---------------------------------------------\
  type "%~f_"
  ECHO=\---------------------------------------------/
  ECHO=
) >> "C:\SomeFolder\output.txt"

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