tasklist.exe,Win Server 2008 R2,文件名包含空格

时间:2015-10-21 03:47:47

标签: batch-file windows-server-2008-r2

我有一个客户端在 Windows Server 2008 R2 上运行Apple的 FileMaker Pro Advanced 。相关的可执行文件是" FileMaker Pro Advanced.exe" (注意空格)。我的客户遇到了问题""关闭FileMaker;一个解决方案的一部分是写一个批处理文件,每15分钟运行一次,如果它没有运行,它将启动FileMaker。我正在帮助批处理文件。

我基于此提出了代码:

set target=FileMaker Pro Advance.exe
set startWith=(batch file that starts FileMaker)
tasklist /FI "IMAGENAME eq '%target%’" /NH 2>NUL | find /I "%target%">NUL
if "%ERRORLEVEL%"=="1" %startWith%
if "%ERRORLEVEL%"=="0" goto :EOF

请注意:任务列表命令行的设计需要使用一组引号;我用那些双引号。文件名中存在空格似乎需要另一组引号;我上面用过单引号。

我的技术不起作用;我收到有关格式错误的命令的错误消息。叹息。

有没有人有解决方法?

如果没有更好的建议,我会要求系统管理员让我将该文件重命名为" FileMakerProAdvanced.exe&#34 ;;应该工作。我只会在一定比例的时间内获得该许可。如果他们拒绝我的请求,我还需要别的东西。

(你们中间鹰派人士会注意到文件名长度是26个字符。似乎任务列表有25个字符的限制。我可以解决这个问题(在发现任务列表提供查找。强大>命令。我可以在查找命令中使用双引号。)

提前感谢您提供解决方案和同意。

1 个答案:

答案 0 :(得分:1)

图像名称过滤器中的空格不会有任何问题,因此无需解决方法,只需删除内部单引号

public static class DataRecordExtensions
{
    public static bool HasColumn(this IDataRecord dr, string columnName)
    {
        for (int i=0; i < dr.FieldCount; i++)
        {
            if (dr.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase))
                return true;
        }
        return false;
    }
}

输出长度的问题仅适用于列模式。您可以更改为csv输出格式

f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])

或者,因为您没有从输出中检索任何数据,而不是隐藏标题,因为它们仅在找到匹配的进程时才出现,请检查标题是否存在

set "target=FileMaker Pro Advance.exe"
tasklist /fi "imagename eq %target%"