将文件读入变量 - 批处理

时间:2014-01-27 21:23:07

标签: parsing batch-file delimiter

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

  • 完全限定的源目录(即// server / share / folder)
  • 完全限定目标目录

这些文件将在单独的行中写入文件。

在我的批处理脚本中,我需要读取文件并将两行放入两个不同的变量(src_dir,tgt_dir)。如果标签或间距更好,我可以毫无问题地更改分隔符。

我正在阅读使用for /f etc,但我不明白它是如何运作的。 谢谢你的指点。

3 个答案:

答案 0 :(得分: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 :(得分: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命令指示反引号字符串是要执行的命令,引用的字符串是要读取的文件。

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

答案 2 :(得分:-1)

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