将文件读入变量

问题描述 投票:0回答:3

我需要以批处理代码解析文件。我的文件中有两条信息。

  • 完全合格的源目录(即//服务器/共享/文件夹)
  • 完全合格的目标目录

这些分别写到文件中。

在我的批处理脚本中,我需要读取文件并将两行放入两个不同的变量(src_dir,tgt_dir)。如果使用制表符或分隔符会更好,我可以更改定界符。

我正在阅读有关使用for /f etc的信息,但我不知道它是如何工作的。谢谢您的指点。

parsing batch-file
3个回答
1
投票
set "src_dir="
set "tgt_dir="
for /f "tokens=* usebackq" %%a in ("c:\somewhere\myfile.txt") do (
  if not defined src_dir ( 
    set "src_dir=%%~a" 
  ) else if not defined tgt_dir (
    set "tgt_dir=%%~a"
  )
)
echo %src_dir%
echo %tgt_dir%

for中,/f表示将要处理文件内容或命令输出。

[tokens=*for命令指示不应在行上进行拆分。

[usebackqfor命令指示加引号的字符串是要执行的命令,而带引号的字符串是要读取的文件。

对于读取的每一行,将执行括号中的代码,以确定两个变量中的哪一个应接收读取的值。


3
投票

FOR / F在这种情况下不是最佳选择。我将解决以下问题:

<"yourFile.txt" (
  set /p "src_dir="
  set /p "tgt_dir="
)

:: Show result
echo src_dir=%src_dir%
echo tgt_dir=%tgt_dir%

如果值之间有空行,则必须为每个空行添加一个额外的set /p =,以便跳过该行。


此方法和MC ND解决方案的一个缺点是值必须按特定顺序排列。如果您可以控制数据文件的创建,则可以创建一个更简单,更可靠的解决方案。

只需用varname=预指定每个值。例如,您的数据文件代码看起来像

src_dir=path1
tgt_dir=path2

然后,您可以使用以下非常简单的脚本来读取值。如果添加其他变量,则不必更改脚本。

for /f "usebackq delims=" %%A in ("pathSpecForYourDataFile") do set "%%A"

-1
投票

您需要做的是解析批处理代码,并将其读入2个变量中

© www.soinside.com 2019 - 2024. All rights reserved.