如何将多个 findstr 结果分配给单独的变量

Posted

技术标签:

【中文标题】如何将多个 findstr 结果分配给单独的变量【英文标题】:how do I assign multiple findstr results to separate variables 【发布时间】:2015-08-11 11:52:58 【问题描述】:

我正在尝试通过使用批处理文件将 CHDIR 结果保存到临时文本文档中,使用 FOR 将子目录名称分配给变量

批处理文件输入:

CD /d 路径名 目录 /b /d >temp.txt FINDSTR /b /n 字符串路径名\temp.txt ECHO 查找上面的字符串结果 暂停 FOR /F "tokens=1-3" %%A IN ('FINDSTR /b string pathname\temp.txt') DO ( SET One=%%A SET 2=%%B 设置三=%%C ) 回声 %One% 回声 %Two% ECHO %3% 暂停

命令提示符输出:

目录1 目录2 目录3 在上面查找字符串结果 按任意键继续 。 . . 目录3 回声已关闭。 回声已关闭。 按任意键继续 。 . .

如果正确分配了 ECHO 变量,则初始 FINDSTR 的结果应与 ECHO 变量匹配,但仅捕获最终子目录名称且未分配最后两个变量。

如何让每个子目录分配给单独的变量? 有没有更简单的方法来实现这个目标?

【问题讨论】:

【参考方案1】:

tokens 子句用于分割每个输入行,而不是确定要读取的行数。

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Clean variables
    for %%b in (one two three) do set "%%b="

    rem Read folders
    for /d %%a in ("c:\somewhere\*") do (
        rem For each folder found, assign to a non assigned variable
        set "done="
        for %%b in (one two three) do if not defined done if not defined %%b (
            set "%%b=%%a"
            set "done=1"
        )
    )

    echo %one%
    echo %two%
    echo %three%

【讨论】:

非常感谢,我对脚本还是很陌生(显然)。我想我试图逆向工程的 .bat 只是混淆了这个问题。【参考方案2】:

存储和处理未定义数量的项目的常用方法是通过数组,它是一个名称相同的变量,但有几个元素通过数字索引或用正方形括起来的下标选择括号;例如:set array[1]=Element number 1

@echo off
setlocal EnableDelayedExpansion

rem Initialize the index
set index=0

rem Process all folders
cd /D pathname
for /D %%a in (string*) do (
   rem Increment the index to next element
   set /A index+=1
   rem Store the folder in next array element
   set "folder[!index!]=%%a"
)

rem Store the total number of folders
set number=%index%

rem Show the first folder
echo First folder: %folder[1]%

rem Show the last folder
echo Last folder: !folder[%number%]!

rem Show all folders
for /L %%i in (1,1,%number%) do echo %%i- !folder[%%i]!

此方法需要延迟扩展,因为索引值在for 循环内发生变化。如果索引以这种方式扩展:%index%,它将在 for 迭代之前扩展一次。如果变量以这种方式包含在百分比中:!index! 并启用延迟扩展(通过开头的setlocal 命令),index 的值将在每次行执行时扩展。您可以在批处理文件here 中阅读有关阵列管理的进一步说明。

【讨论】:

感谢您提供的信息!我也得试试这个方法。

以上是关于如何将多个 findstr 结果分配给单独的变量的主要内容,如果未能解决你的问题,请参考以下文章

我可以将Findstr结果保存在变量中吗?

如何将 iPython 分析器 %%prun -r 的结果分配给变量?

在批处理中怎么样将findstr查找的值赋值给变量?

如何将相同的 var 类型变量分配给不同的 linq to sql 结果集?

如何将具有单独字体大小的多个字体分配给同一类

将多个变量分配给函数[重复]