【问题标题】:Need a batch/vbs to read a dash-separated txt file and output variable values需要批处理/vbs 来读取破折号分隔的 txt 文件并输出变量值
【发布时间】:2013-10-04 23:03:18
【问题描述】:

假设我有一个 TXT 文件,其中仅包含一行,其中多个值用破折号分隔,如下所示:

1000 -675 -76 -98 -10

我需要创建一个batch 文件或vbs 来读取TXT 文件并为每个值分配一个变量。输出应该是这样的:

variablename=1000

variablename=675

variablename=76

variablename=98

variablename=10

有没有办法做到这一点?感谢您的帮助....谢谢

【问题讨论】:

  • “为每个值分配一个变量”是什么意思?您是否尝试在程序中设置环境或变量?到目前为止,您尝试过什么?
  • TXT 文件中的每个值都应分配给一个变量。每个变量都应该有一个特定的名称,例如:apples=1000 pinapples=675
  • 苹果不会从天上掉下来!你只能有一个数组。
  • @Karsten 我们在哪里可以获得变量名列表?否则变量名必须是连续的。 Var1, Var2, Var3, ...

标签: batch-file vbscript


【解决方案1】:

在 VBScript 中,您可能会使用字典来存储值:

Set fso  = CreateObject("Scripting.FileSystemObject")
Set vars = CreateObject("Scripting.Dictionary")

i = 1
For Each val In Split(fso.OpenTextFile("C:\path\to\your.txt").ReadAll, " -")
  vars.Add "var" & i, Trim(val)
  i = i + 1
Next

如果您想要字典元素的特定名称,您可以在数组中提供它们:

Set fso  = CreateObject("Scripting.FileSystemObject")
Set vars = CreateObject("Scripting.Dictionary")

names = Array("apples", "pineapples", ...)

i = 0
For Each val In Split(fso.OpenTextFile("C:\path\to\your.txt").ReadAll, " -")
  vars.Add names(i), Trim(val)
  i = i + 1
Next

当然名称的个数必须等于或大于值的个数,否则会报错。

【讨论】:

  • +1 用于第二种方法(像 var1、var2 等键(或变量名)是不好的做法);但是 .Split() 应该使用“-”分隔符。
  • 已修复。感谢您的提醒。至于变量名:我同意“编号”变量是一种糟糕的方法,但是 OP 并没有给我们太多的工作,所以这只是为了给他一个大致的想法。
【解决方案2】:

好的,要从批处理文件中读取 .txt 文件中的多条信息,请使用 for /f 循环:

set /p line=< Text file.txt
for /f "tokens=1,2,3,4,5 delims=-" %%a in ("%line%") do (
set var1=%%a
set var2=%%b
set var3=%%c
set var4=%%d
set var5=%%e
)

等等。请注意,这只会解析第一行,(并且您需要对预期的数字有一些了解)。告诉我你是否想要一个可以解析数字和数量的恶意脚本。

莫娜

【讨论】:

  • 请注意,此解决方案仅适用于一行中最多 5 个值。
【解决方案3】:
@echo off&setlocal enabledelayedexpansion
set /a inc=0
for /f "delims=" %%i in (file.txt) do (
   set a=%%i
   set a=!a:-=!
    for %%j in (!a!) do (
      set V[!inc!]=%%j
      set /a inc+=1
   )
)
for /l %%i in (0,1,%inc%-1) do echo !V[%%i]!

这将根据需要获取尽可能多的令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多