【问题标题】:How to store the result of a command expression in a variable using bat scripts?如何使用 bat 脚本将命令表达式的结果存储在变量中?
【发布时间】:2009-09-15 13:35:23
【问题描述】:

我有下面的命令来计算所有遵循20?????? 模式的目录:

'dir /b "20??????" | find /c "2"'

例如,如果我有以下目录,该命令将返回 6:

20090901
20090902
20090903
20090904
20090905
20090906

如何将该命令的结果(前面提到的示例中为 6)存储在变量中?

【问题讨论】:

    标签: batch-file


    【解决方案1】:
    set cmd="dir /b "20??????" | find /c "2" "
    
    FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET X=%%i
    

    【讨论】:

    • 对可能正在使用它的其他人请注意:如果这是在批处理文件中完成的,则必须在 for 命令中两次将 %i 替换为 %%i
    • @fduff 使用FOR完成将命令结果分配给变量确实是一个奇迹。
    • 呃,这似乎不适用于带空格的多行输出?
    • @CamiloMartin 抱歉,我不小心按了 Enter 键。我也显然在换行时挣扎。 FOR /F "tokens=*" %i IN (' %cmd% ') DO SET X=%i tokens 命令的其他用途,例如删除第二列:FOR /F "tokens=1,3*" %i IN (' %cmd% ') DO SET X=%i %j %k 即 i 等于第一列,j 等于第三列,k 等于第四列,以此类推。它确实假设分隔符是一个空格(在 SET 部分中),因此如果需要,请修改它(您可以定义分隔符,方法与定义标记的方式相同)。问号是你的朋友! FOR /?
    • 请参阅here 了解有关此技术的说明。
    【解决方案2】:
    (dir /b "20??????" | find /c "2")>>x.txt  
    set /p variable=<x.txt
    

    就是这样。

    当然,如果您不想要该文件,请在之后执行此操作:

    del x.txt
    

    EDIT -- 如何使文件名唯一:

    @Mai:用它来创建一个唯一的文件名:

    set timestamp=%date:.=%%time::=%
    set timestamp=%timestamp:,=%
    set timestamp=%timestamp:/=%
    set timestamp=%timestamp:-=%
    set filename=file%timestamp%.tmp
    

    如果您的系统文化的日期格式中包含其他字符,请添加更多替换

    【讨论】:

    • 那么,如果已经有一个名为x.txt的文件呢? (由用户或其他程序创建?)
    • @Mai:我添加了创建唯一文件名的代码。
    【解决方案3】:

    这是一个示例:

    @echo off
    set wildcard=C:\*.*
    set count=0
    FOR /F %%a in ('DIR /B %wildcard%') do set /A count=count+1
    echo %count% files matching %wildcard%
    set choice=
    set /p choice=Press enter to continue ...
    

    【讨论】:

      【解决方案4】:

      这是我的代码:

      @echo off
      set com=echo HI
      ::Start Of Code You Need
      echo|%com%>>"%temp%\tmp.txt"
      for /f "tokens=* delims=" %%x in (%temp%\tmp.txt) do (
      set output=%%x
      )
      del /q %temp%\tmp.txt
      ::End Of Code You Need
      echo This Is The Output:
      echo %output%
      pause>NUL
      

      它接受来自com 的输入和来自output 的输出

      【讨论】:

        【解决方案5】:
        @echo off
        
        REM The command fltmc volumes provides some information about drives
        REM I need to extract the drive letter associated to a particular volume name.
        REM Here's how:
        
        fltmc volumes | find /i "\Device\HarddiskVolume3" > delme.txt
        for /f "tokens=1 delims= " %%i in (delme.txt) DO echo %%i
        Del /f delme.txt
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-02
          • 2012-04-01
          • 1970-01-01
          • 2016-02-05
          • 2020-08-14
          相关资源
          最近更新 更多