【问题标题】:Reading a text file line by line and storing it in an array using batch script逐行读取文本文件并使用批处理脚本将其存储在数组中
【发布时间】:2018-08-16 04:10:28
【问题描述】:

我想读取一个文本文件并将每一行存储在一个数组中。当我使用下面的代码时,"echo %i%" 每次都打印0,并且只有array[0] 值被分配。但是在"set n=%i%",n 中,值被分配为最后一个递增的 I 值。此外,"@echo !array[%%i]!"!array[0]! 一样打印,而不是打印值。代码有语法错误吗?

set /A i=0

for /F %%a in (C:\Users\Admin\Documents\url.txt) do (

set /A i+=1

echo %i%

set array[%i%]=%%a

)

set n=%i%

for /L %%i in (0,1,%n%) do @echo !array[%%i]!

【问题讨论】:

标签: windows batch-file


【解决方案1】:

这是一种有时很有用且与您的代码非常相似的方法:

@echo off
set "file=C:\Users\Admin\Documents\url.txt"
set /A i=0

for /F "usebackq delims=" %%a in ("%file%") do (
set /A i+=1
call echo %%i%%
call set array[%%i%%]=%%a
call set n=%%i%%
)

for /L %%i in (1,1,%n%) do call echo %%array[%%i]%%

【讨论】:

    【解决方案2】:
    @echo off &setlocal enabledelayedexpansion
    for /F "delims=" %%a in (C:\Users\Admin\Documents\url.txt) do (
        set /A count+=1
        set "array[!count!]=%%a"
    )
    for /L %%i in (1,1,%count%) do echo !array[%%i]!
    

    在代码块中,您需要 delayed expansion!variables!

    【讨论】:

      【解决方案3】:

      阅读set /? 关于环境运行时链接的描述。当您在 for 中使用 %i% 时 - 它在 for 执行之前预先展开。您需要改用!i!

      【讨论】:

      • 感谢 Maximus,我将 %i% 替换为 !i!。现在“回声!我!”正在打印!我!并且“array[!i!]=%%a”将值分配为 array[!i!]。使用“!”时未应用 i 时的值。
      • 我想你还没有读过set /?。仔细阅读有关 cmd 和 /v 开关的内容。
      • @NagaLakshmi - 在批处理文件中,您可以使用 setlocal enableDelayedExpansion 来做到这一点。
      【解决方案4】:
      @ECHO OFF
      SETLOCAL
      FOR /f "tokens=1*delims=:" %%i IN ('findstr /n /r "$" url.txt') DO SET max=%%i&SET array[%%i]=%%j
      FOR /l %%i IN (1,1,%max%) DO CALL ECHO(%%array[%%i]%%
      GOTO :EOF
      

      只要没有以“:”开头的行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 1970-01-01
        • 2015-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多