1

我正在运行类似的命令

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} 来保存命令返回的输出值,然后使用该输出。但是事情并没有像附图中描述的那样进行 在此处输入图像描述

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

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

4

1 回答 1

2

您的问题是检索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
于 2017-03-16T08:13:39.623 回答