Parsing 将文件读入变量
我需要用批处理代码解析一个文件。我的档案里有两条信息Parsing 将文件读入变量,parsing,batch-file,Parsing,Batch File,我需要用批处理代码解析一个文件。我的档案里有两条信息 完全限定源目录(即//server/share/folder) 完全限定目标目录 这些将以单独的行写入文件 在批处理脚本中,我需要读取文件并将这两行放入两个不同的变量(src_dir、tgt_dir)。如果制表符或分隔符更好,我可以毫无问题地更改分隔符 我正在阅读关于使用for/f etc的文章,但我不明白它是如何工作的。 谢谢你的指点 您需要做的是解析批处理代码,并将其读入2个变量中您需要做的是解析批处理代码,并将其读入2个变量中您需要
- 完全限定源目录(即//server/share/folder)
- 完全限定目标目录
for/f etc
的文章,但我不明白它是如何工作的。
谢谢你的指点 您需要做的是解析批处理代码,并将其读入2个变量中您需要做的是解析批处理代码,并将其读入2个变量中您需要做的是解析批处理代码,并将其读入2个变量中您需要做的是解析批处理代码,并将它们读入2个变量中
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
命令指示不应在行上进行拆分
usebackq
向for
命令指示反引号字符串是要执行的命令,引号字符串是要读取的文件
对于读取的每一行,将执行括号中的代码,确定两个变量中的哪一个应接收读取的值
在for
中,/f
表示要处理文件内容或命令输出
tokens=*
向for
命令指示不应在行上进行拆分
usebackq
向for
命令指示反引号字符串是要执行的命令,引号字符串是要读取的文件
对于读取的每一行,将执行括号中的代码,确定两个变量中的哪一个应接收读取的值
在for
中,/f
表示要处理文件内容或命令输出
tokens=*
向for
命令指示不应在行上进行拆分
usebackq
向for
命令指示反引号字符串是要执行的命令,引号字符串是要读取的文件
对于读取的每一行,将执行括号中的代码,确定两个变量中的哪一个应接收读取的值
在for
中,/f
表示要处理文件内容或命令输出
tokens=*
向for
命令指示不应在行上进行拆分
usebackq
向for
命令指示反引号字符串是要执行的命令,引号字符串是要读取的文件
对于读取的每一行,将执行括号中的代码,确定两个变量中的哪一个应接收读取的值。For/F不是这种情况下的最佳选项。我将按以下方式解决问题:
<"yourFile.txt" (
set /p "src_dir="
set /p "tgt_dir="
)
:: Show result
echo src_dir=%src_dir%
echo tgt_dir=%tgt_dir%
然后,您可以使用以下非常简单的脚本来读取这些值。如果添加其他变量,则脚本不必更改
for /f "usebackq delims=" %%A in ("pathSpecForYourDataFile") do set "%%A"
在这种情况下,FOR/F不是最佳选项。我将按以下方式解决问题:
<"yourFile.txt" (
set /p "src_dir="
set /p "tgt_dir="
)
:: Show result
echo src_dir=%src_dir%
echo tgt_dir=%tgt_dir%
然后,您可以使用以下非常简单的脚本来读取这些值。如果添加其他变量,则脚本不必更改
for /f "usebackq delims=" %%A in ("pathSpecForYourDataFile") do set "%%A"
在这种情况下,FOR/F不是最佳选项。我将按以下方式解决问题:
<"yourFile.txt" (
set /p "src_dir="
set /p "tgt_dir="
)
:: Show result
echo src_dir=%src_dir%
echo tgt_dir=%tgt_dir%
然后,您可以使用以下非常简单的脚本来读取这些值。如果添加其他变量,则脚本不必更改
for /f "usebackq delims=" %%A in ("pathSpecForYourDataFile") do set "%%A"
在这种情况下,FOR/F不是最佳选项。我将按以下方式解决问题:
<"yourFile.txt" (
set /p "src_dir="
set /p "tgt_dir="
)
:: Show result
echo src_dir=%src_dir%
echo tgt_dir=%tgt_dir%
然后,您可以使用以下非常简单的脚本来读取这些值。如果添加其他变量,则脚本不必更改
for /f "usebackq delims=" %%A in ("pathSpecForYourDataFile") do set "%%A"
我试了一下。src_dir显示正确,但target_dir没有,你知道为什么吗?@staples89-没有更多信息。您所说的未正确显示是什么意思?如果没有值,则可能有银行行必须使用额外的SET/P进行核算。如果值不正确,则应显示正确的值与您得到的值。但是这种技术应该是非常可靠的。我的输出是这样的:src_dir=\\server\share\folder tgt_dir='我将向你们两个提出这个问题——在不久的将来,我将有一个文件,其中包含8或9行不同的行,我需要将它们放入不同脚本中的变量中。在您的方法中,我只添加行,(set/p“var=”)不是吗?我希望我能把这两个标记为好答案…@staples89-那么在源代码和目标代码之间可能会有一行或多行空行。您需要跳过空行,对每个空行使用
set/p=
。MC-ND解决方案会起作用,因为FOR/F总是跳过空行。src_dir显示正确,但target_dir没有,你知道为什么吗?@staples89-没有更多信息。您所说的未正确显示是什么意思?如果没有值,则可能有银行行必须使用额外的SET/P进行核算。如果值不正确,则应显示正确的值与您得到的值。但是这种技术应该是非常可靠的。我的输出是这样的:src_dir=\\server\share\folder tgt_dir='我将向你们两个提出这个问题——在不久的将来,我将有一个文件,其中包含8或9行不同的行,我需要将它们放入不同脚本中的变量中。在您的方法中,我只添加行,(set/p“var=”)不是吗?我希望我能把这两个标记为好答案…@staples89-那么在源代码和目标代码之间可能会有一行或多行空行。您需要跳过空行,对每个空行使用set/p=
。MC ND解决方案将起作用