【问题标题】:Save command output to variable将命令输出保存到变量
【发布时间】:2011-12-31 06:19:50
【问题描述】:

在批处理文件中,我试图获取命令的输出并将其保存到变量中。

我的命令的目标是统计某个文件夹中的文件夹数。

  • 我不能使用this 接受的答案中提供的技巧,因为我必须执行cd path\to\my\folder 才能进入当前目录。不幸的是,我无法执行此命令,因为path\to\my\folder 实际上是一条 UNC 路径 (\\path\to\my\folder),而 windows cmd 不支持 cd \\some\UNC\path
  • 我知道this 的回答,但我不想使用临时文件。

所以我尝试执行以下操作:

  • 要获取文件夹的数量,我使用:

    dir \\path\to\my\folder | find /c "<REP>"
    

    这很好用,并按我的预期返回一个数字。

  • 为了在批处理变量中检索此命令的输出,我尝试了:

    FOR /F "TOKENS=*" %%i IN ('\\path\to\my\folder | find /c "<REP>"') DO 
    SET value = %%i
    

    但是没有成功,错误信息是……

    |出乎意料。

    ...当我执行批处理文件时...

    %%i 出乎意料。

    当我尝试直接在命令窗口中执行命令时。我试图转义 &lt;REP&gt; 字符串 (...find /c ""&lt;REP&gt;""') DO...) 周围的引号,得到了同样的错误。

我是否在正确的路径上检索变量中的输出?我应该怎么做才能解决错误消息?
或者也许有更简单的方法可以在变量中设置命令输出?

【问题讨论】:

  • 解决您遇到的问题:1) | 应该像这样在该上下文中转义:^|,以及 2) %%i 仅用于批处理文件,@987654335 @ 是直接在命令提示符下使用的对应物。

标签: windows command-line batch-file cmd


【解决方案1】:

您可以使用您首先提到的答案。您不必在那里cd,但您可以使用pushd,它将为UNC 路径分配一个临时驱动器号,当您执行popd 时将释放该驱动器号。

所以本质上:

pushd \\server\path
set count=0
for /d %%x in (*) do set /a count+=1
popd

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多