У меня есть текстовый файл file.txt с содержимым:

%Здравствуйте%

Если я установил "привет" на "холи", могу ли я набрать file.txt и разрешить содержимое переменной?

Может быть, это архивируемый трубопровод для эха, но

введите file.txt | эхо

У меня не работает.

Любая помощь будет оценена по достоинству.

Благодарность

-1
Fradantim 15 Апр 2016 в 23:15

2 ответа

Лучший ответ

Предполагая, что нет пустых строк, которые нужно сохранить

for /f usebackq^ delims^=^ eol^= %%A in ("yourFile.txt") do call echo(%%A

Если есть пустые строки, но ни одна строка не начинается с :, то

for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "yourFile.txt"') do call echo(%%B

Если есть пустые строки, и некоторые строки начинаются с :, и нет литералов !

setlocal enableDelayedExpansion
for /f "delims=" %%A in ('findstr /n "^" "yourFile.txt"') do (
  set "ln=%%A"
  call echo(!ln:*:=!
)

Если есть пустые строки и некоторые строки начинаются с :, а есть литералы !

for /f "delims=" %%A in ('findstr /n "^" "yourFile.txt"') do (
  setlocal enableDelayedExpansion
  set "ln=%%A"
  call echo(!ln:*:=!
  endlocal
)

Все вышеперечисленное использует CALL, что значительно замедляет работу. Решение будет быстрее, если вы поместите в файл !hello! вместо %hello%, а затем вы можете полагаться на отложенное раскрытие для расширения переменной.

Если нет пустых строк

setlocal enableDelayedExpansion
for /f usebackq^ delims^=^ eol^= %%A in ("yourFile.txt") do echo(%%A

Если пустые строки, но ни одна строка не начинается с :

setlocal enableDelayedExpansion
for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "yourFile.txt"') do echo(%%B

Если пустые строки и некоторые строки начинаются с :

setlocal enableDelayedExpansion
for /f "delims=" %%A in ('findstr /n "^" "yourFile.txt"') do (
  set "ln=%%A"
  echo(!ln:*:=!
)
3
dbenham 15 Апр 2016 в 21:14

Итак, я так понимаю, вы хотите, чтобы содержимое файла расширялось так же, как переменные.

Ну вот:

>echo %hello%>file.txt

>type file.txt
%hello%

>set hello=holi

>type file.txt
%hello%

>for /f %f in (file.txt) do @echo %f
%hello%

>for /f %f in (file.txt) do @call echo %f
holi

>
3
Klitos Kyriacou 15 Апр 2016 в 21:11