Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file WMIC批量获得母公司_Batch File_Wmi_Wmic - Fatal编程技术网

Batch file WMIC批量获得母公司

Batch file WMIC批量获得母公司,batch-file,wmi,wmic,Batch File,Wmi,Wmic,我们已经能够把以下内容放在一起,这些内容确实有效,但在最后有一行额外的内容 For /f "tokens=1,2 skip=1 delims=\" %%i IN ( 'WMIC service WHERE "name LIKE 'tomcat%%'" GET PathName' ) DO ( echo %%i\%%j ) Pause 运行时,我们会看到: D:\tomcat D:\tomcat2 \ 和\不正确。如果要批量执行,可以使用此语法。这只是给你父母和祖父母文件夹。如果需要这些

我们已经能够把以下内容放在一起,这些内容确实有效,但在最后有一行额外的内容

For /f "tokens=1,2 skip=1 delims=\" %%i IN (
  'WMIC service WHERE "name LIKE 'tomcat%%'" GET PathName'
) DO (
echo %%i\%%j
)
Pause
运行时,我们会看到:

  • D:\tomcat
  • D:\tomcat2
  • \

和\不正确。

如果要批量执行,可以使用此语法。这只是给你父母和祖父母文件夹。如果需要这些的完整路径,则将
dp
修饰符添加到FOR变量中

@echo off
For /f "skip=1 delims=" %%G IN ('WMIC service WHERE "name LIKE 'wdpostman'" GET PathName ^|findstr /r /V "^$"') DO (
    for %%H in ("%%~dpG\.") do set "parent=%%~nxH"
    for %%H in ("%%~dpG\..") do set "gparent=%%~nxH"
)
echo parent=%parent%
echo gparent=%gparent%
只是想添加这组额外的代码,向您展示如何将文件夹路径分解为变量

@echo off
setlocal enabledelayedexpansion
For /f "skip=1 delims=" %%G IN ('WMIC service WHERE "name LIKE 'wdpostman'" GET PathName ^|findstr /r /V "^$"') DO (
    set "_fpath=%%~dpG"
)
set "_fpath=%_fpath:~0,-1%"
set i=1
set "_spath!i!=%_fpath:\=" & set /A i+=1 & set "_spath!i!=%"
echo There %i% Folder(s^)
set _spath

Pause

我的一位同事向我指出:

-更具体地说:


我知道它没有@Squashman的解决方案那么优雅,但这正是我所寻找的,或者至少与之类似。

根据我的经验,路径名实际上会返回额外的行。当我这么说的时候,我的意思是在通常的WMIC命令的“奇数”输出之上。为了确保您的输出不受影响,我将使用
Call
解决它

@Echo关闭
对于/F“Skip=1 Delims=“%%A In(
“‘WMIC服务,其中(名称类似‘tomcat%%’)获取路径名””
)Do Call:Sub%%A
超时-1
后藤:EOF
:Sub
如果不是“%~1”==”回显(%*

环绕另一个
for/F
循环,以消除
for/F
留下的Unicode到ANSI文本转换人工制品(孤立的回车字符):

for/F“skip=1 delims=“%%a in('
wmic服务,其中“类似于'tomcat%%'的名称”获取路径名
""做"(
对于/F“tokens=1,2 delims=\”%%i in(“%%a”)do(
echo%%i\%%j
)
)

外部循环读取除要跳过的行以外的所有行;内部循环解析文本。

我建议使用PowerShell而不是批处理(一行):
gwmi Win32_服务-筛选器“名称类似于‘tomcat%””;%%{$\路径名}
我得到以下信息:
批处理参数替换中路径运算符的以下用法无效:%~dpG\..
对不起。我没有将%.dpG加倍。不完全是..我刚刚被指:我的一位同事..现在发布解决方案。@Leptonator,是的,你是正确的。我正要添加该代码。我总是伪造t关于WMIC输出空行。@Leptonator,我添加了一组额外的代码,向您展示如何将每个文件夹也放入一个变量中。因此,这真的应该标记为一个重复的问题吗?我最喜欢这个答案,因为它涵盖了所需内容,如果我们正在玩脚本高尔夫,我认为这是赢家!我感谢您为我们提供的所有输入这个问题。
For /f "tokens=1,2 skip=1 delims=\" %%i IN (
  'WMIC service WHERE "name LIKE 'tomcat%%'" GET PathName  ^| findstr /r /v "^$"'
) DO (
echo %%i\%%j
)
Pause