【问题标题】:Batch type file with variables带有变量的批处理类型文件
【发布时间】:2016-04-15 20:15:20
【问题描述】:

我有一个包含以下内容的文本文件 file.txt:

%你好%

如果我将 hello 设置为“holi”,有什么方法可以输入 file.txt 并解析变量内容?

也许它是可归档的管道来回显,但是

输入文件.txt |回声

不适合我。

我们将不胜感激。

谢谢

【问题讨论】:

  • 你能澄清一下你想做什么,你的问题是什么?你将hello设置为“holi”是什么意思。解析可变内容是什么意思?
  • @kaskader - Fradantim 有一个名为hello 的环境变量,其值为holi。他想写文件的内容,但要扩展百分比内的变量名。
  • 感谢@dbenham,现在更清楚了!如果您可以重写问题以使其更易于理解,那就太好了!

标签: variables batch-file echo


【解决方案1】:

假设没有空行需要保留

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:*:=!
)

【讨论】:

  • 谢谢!这正是我想要的!你的第三个例子非常棒。感谢您这么快回答。
【解决方案2】:

所以我认为您希望文件的内容像变量一样被扩展。

给你:

>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

>

【讨论】:

  • 感谢您的理解和这么快的回答。这是一个很好的答案,但如果文件包含的行不仅仅是变量,如“a%hello%”或“a %hello%”或“%hello% a”,它对我不起作用。抱歉,我应该这么说的。
  • @Fradantim 我试过了,它确实有效,至少在你提到的情况下。但是,它不适用于空行 - 在这方面,dbenham 为您提供了更好的答案。
猜你喜欢
  • 2015-07-18
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2010-10-23
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多