将命令的输出保存在命令行中的变量或临时文件中

Hold the output of a command in a variable or temp file in command line

我正在 运行 宁一个像

这样的命令
nssm.exe get MyWindowsService AppParameters

它的输出是

--client-version 6.1.0

现在我想像这样向这个输出附加一些文本

--client-version 6.1.0 --baseUrl helloworld.txt

然后 运行 一个新命令和这个新输出

nssm.exe set MyWindowsService AppParameters = --client-version 6.1.0 --baseUrl helloworld.txt

我想在一个批处理文件中完成所有这些,所以我只需要添加“--baseUrl helloworld.txt”,它应该处理与第一个命令的输出的连接,并用第二个命令自行执行.

我一直在使用 {for /f} 来保存命令返回的输出值,然后使用该输出。但是事情并没有像附图中描述的那样进行

我已经使用这种方法(从文件中读取文本)几次,它似乎工作正常,但有时当我试图通过命令行从文件中读取文本时,"output(ted)"它不会工作。请指导我如何处理这种情况以及造成这种情况的原因

您可以在此处找到输出文件 https://www.dropbox.com/s/yr6s7eo8d8uwhey/output.txt?dl=0

您的问题是检索 AppParameters 时的 unicode 输出。您可以将其处理为

nssm get MyWindowsService AppParameters > tempFile
for /f "delims=" %%a in ('
    ^< tempFile find /v ""
') do (
    nssm.exe set MyWindowsService AppParameters "%%a --baseUrl helloworld.txt"
)

nssm get MyWindowsService AppParameters > tempFile
for /f "delims=" %%a in ('
    more tempFile
') do (
    nssm.exe set MyWindowsService AppParameters "%%a --baseUrl helloworld.txt"
)

或者,没有临时文件

for /f "delims=" %%a in ('
    nssm get MyWindowsService AppParameters ^| sort
') do (
    nssm.exe set MyWindowsService AppParameters "%%a --baseUrl helloworld.txt"
)

已编辑 包含如何处理引号的示例代码。

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "svc=MyWindowsService"

    nssm install "%svc%" "c:\windows\system32\cmd.exe"
    nssm set     "%svc%" Start SERVICE_DEMAND_START
    nssm set     "%svc%" AppParameters "--client-version ""6.1.0"""

    echo ---------------------------------------------------------------
    nssm get     "%svc%" AppParameters
    echo ---------------------------------------------------------------

    for /f "delims=" %%a in ('
        nssm get "%svc%" AppParameters ^| sort
    ') do (
        set "appParams=%%a"
        setlocal enabledelayedexpansion
        nssm.exe set "%svc%" AppParameters "!appParams:"=""!" "--baseUrl=""C:\ProgramData\"""
        endlocal
    )

    echo ---------------------------------------------------------------
    nssm get     "%svc%" AppParameters
    echo ---------------------------------------------------------------

    nssm remove  "%svc%" confirm