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 格式化结果为.CMD_Batch File_Cmd - Fatal编程技术网

Batch file 格式化结果为.CMD

Batch file 格式化结果为.CMD,batch-file,cmd,Batch File,Cmd,我正在尝试创建一个运行和检查基本系统信息的基本脚本,但我希望格式化输出,使结果在同一行上并且易于阅读 @Echo Off systeminfo | findstr /B /C:"OS Name" /C:"OS Version" wmic cpu get name, status systeminfo | findstr /C:"Total Physical Memory" @echo off & setlocal ENABLEDELAYEDEXPANSION SET "volum

我正在尝试创建一个运行和检查基本系统信息的基本脚本,但我希望格式化输出,使结果在同一行上并且易于阅读

@Echo Off

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

wmic cpu get name, status

systeminfo | findstr /C:"Total Physical Memory"

@echo off & setlocal ENABLEDELAYEDEXPANSION
SET "volume=C:"
FOR /f "tokens=1*delims=:" %%i IN ('fsutil volume diskfree %volume%') DO (
    SET "diskfree=!disktotal!"
    SET "disktotal=!diskavail!"
    SET "diskavail=%%j"
)
FOR /f "tokens=1,2" %%i IN ("%disktotal% %diskavail%") DO SET "disktotal=%%i"& SET "diskavail=%%j"
ECHO(Total Space:            %disktotal:~0,-9% GB
ECHO(Available Space:        %diskavail:~0,-9% GB

systeminfo | find "System Boot Time:"

systeminfo | find "System Type:"

Echo Antivirus: & wmic /node:localhost /namespace:\\root\SecurityCenter2 path AntiVirusProduct Get DisplayName | findstr /V /B /C:displayName || echo No Antivirus installed

这方面的主要示例是wmic命令将结果放在下一行而不是同一行


另外,如果您能给我提供更好的脚本编写方法,我将不胜感激。

WMIC的输出是unicode

通过将值传递给另一个FOR/F循环,可以删除尾随的
。这也会删除虚拟的“空白”行(实际上是

@Echo关闭
调用:获取CPU名称CPU名称
设置“WMIC_Antivirus=WMIC/node:localhost/namespace:\\root\SecurityCenter2路径AntiVirusProduct Get DisplayName^ findstr/V/B/C:DisplayName”
@对于/F“delims=“%%I in(“%WMIC_Antivirus%”)do(
对于/f“delims=“%”中的%%A(“%%I”)设置“Antivirus=%%A”
)
回显CPU:%CPU\u名称%
echo防病毒软件:%Antivirus%
暂停和退出
::----------------------------------------------------
:获取CPU
设置“WMIC_CPU=WMIC CPU获取名称/值”
对于/F“令牌=2 delims==”%%I IN(
“%WMIC_CPU%^查找/I”%~1“2^>^nul”
)DO FOR/F“delims=“%%A IN(“%%I”)DO设置“%2=%%A”
退出/b
::----------------------------------------------------
您可以尝试将输出保存到文本文件中:

@Echo关闭
:::::::::::::::::::::::::::::::::::::::::
::自动检查并获取管理员权限
:::::::::::::::::::::::::::::::::::::::::
REM-->检查权限
注册查询“HKU\S-1-5-19\Environment”>nul 2>&1
REM-->如果设置了错误标志,则我们没有管理员。
如果“%errorlevel%”NEQ“0”(
回声。
回音**************************************
ECHO正在运行管理shell…请稍候。。。
回音**************************************
转到UACPrompt
)其他(转到转到管理)
:UACPrompt
echo Set UAC=CreateObject^(“Shell.Application”^)>%temp%\getadmin.vbs
设置参数=%*:“=”“”
echo UAC.ShellExecute“cmd.exe”、“/c”“%~s0”“%params%”、“,”runas“,1>>%temp%\getadmin.vbs”
%temp%\getadmin.vbs
删除“%temp%\getadmin.vbs”
退出/B
:gotAdmin
::::::::::::::::::::::::::::
::开始
::::::::::::::::::::::::::::
SetLocal EnableDelayedExpansion
设置“Log=%~dp0Log.txt”
如果存在“%Log%”删除“%Log%”
调用:获取CPU名称CPU名称
设置“WMIC_Antivirus=WMIC/node:localhost/namespace:\\root\SecurityCenter2路径AntiVirusProduct Get DisplayName^ findstr/V/B/C:DisplayName”
@对于/F“delims=“%%I in(“%WMIC_Antivirus%”)do(
对于/f“delims=“%”中的%%A(“%%I”)设置“Antivirus=%%A”
)
(
回声。
回声*************************************一般信息***********************************
回声。
在配置文件%userprofile%上的%username%下运行的回显
回显计算机名称:%computername%
回声。
系统信息
Echo操作系统:
回显处理器架构:%PROCESSOR\u架构%
回波处理器的\u数量:%u处理器的\u数量%
回显处理器\u标识符:%s处理器\u标识符%
回显处理器级别:%PROCESSOR\u LEVEL%
回显处理器\u版本:%PROCESSOR\u版本%
回显操作系统类型:%OS%
回音(
回显程序文件路径:%Programfiles%
回显程序文件(86^)路径:%Programfiles(86^)%
回显程序W6432路径:%ProgramW6432%
回显PSModulePath:%PSModulePath%
回显系统根:%SystemRoot%
回显临时文件夹:%Temp%
回显CPU:!CPU\u名称!
echo Antivirus:!Antivirus!
回声。
Echo****************************驱动信息*************************************
回声。
Echo列出了当前连接的驱动器:
wmic logicaldisk获取标题、说明、卷名|查找/v“”
回声。
回显物理驱动器信息:
对于('fltmc卷^ |查找“:”)中的/F“令牌=1-3%%A,请执行echo%%A%%B%%C
)>>%Log%
启动“”%Log%”并退出
::----------------------------------------------------
:获取CPU
设置“WMIC_CPU=WMIC CPU获取名称/值”
对于/F“令牌=2 delims==”%%I IN(
“%WMIC_CPU%^查找/I”%~1“2^>^nul”
)DO FOR/F“delims=“%%A IN(“%%I”)DO设置“%2=%%A”
退出/b
::----------------------------------------------------
fsutil
命令的输出略有不同。 如果可以的话,我选择了一个简单的选项

不确定防病毒输出,因为您需要 安装或不确定

它只运行一次
systeminfo
,以节省时间

查看
set/?
,了解有关替换的信息 使用

net session
命令用于测试脚本是否以管理员身份运行。 如果不是Admin,则将跳过
fsutil
,因为它需要Admin

查看
以获取/?
,了解脚本中使用的命令的用法

使用
enabledelayedexpansion
可防止特殊情况 正在公开的字符,否则可能导致错误。 并在代码块中使用,以根据需要延迟扩展

从被空格替换的值字符串中删除逗号。 逗号通常用作千位分隔符,数字看起来很奇怪 而是使用空格。这是因为使用了简单的
for
循环将逗号解释为参数分隔符。其他 角色扮演者也可以做到这一点,尽管可能有一个空间更好
在他们的情况下,我需要做什么更改才能使它与其他WMIC命令一起工作,如“WMIC cpu获取名称、状态”或“WMIC产品,其中“name='name here'”获取名称、版本“好的,所以我找到了答案集WMIC_CMD=WMIC cpu获取名称@For/F”delims=“%%C in(“%WMIC_CMD%”)do(For/F“delims=“%%N in”(%%C”)do Set”CPU=%%N”)回显CPU类型:%CPU%但我仍在尝试格式化间距,以便它们大致对齐,是否有一种简单的方法来执行此操作?这不会将系统信息命令与wmic命令对齐,但将wmic放在一行是问题的一部分,但我需要对齐所有结果
@echo off
setlocal

for /f "tokens=1,* delims=:" %%A in ('systeminfo') do (
    if "%%~A" == "OS Name" (
        call :print "%%~A" %%B
    ) else if "%%~A" == "OS Version" (
        call :print "%%~A" %%B
        call :cpu
    ) else if "%%~A" == "Total Physical Memory" (
        call :print "%%~A" %%B
        call :fsutil C:
    ) else if "%%~A" == "System Boot Time" (
        call :print "%%~A" %%B
    ) else if "%%~A" == "System Type" (
        call :print "%%~A" %%B
    )
)

:next
call :antivirus

pause
exit /b

:print
setlocal enabledelayedexpansion
set "name=%~1"
if not defined name exit /b
set "name=%~1                                "
set "full=%*"
set "full=!full:,=!"
set "data="
set "skip1="

for %%A in (!full!) do (
    if not defined skip1 (
        set "skip1=defined"
    ) else if not defined data (
        set "data=%%~A"
    ) else (
        set "data=!data! %%~A"
    )
)

echo !name:~,30!: !data!
exit /b

:antivirus
setlocal enabledelayedexpansion
set "antivirus="

for /f "tokens=*" %%A in ('
 2^>nul wmic /node:localhost
 /namespace:\\root\SecurityCenter2 path AntiVirusProduct
 Get DisplayName /value
 ^| findstr /i /b /c:"DisplayName" ^|^| echo No Antivirus installed
') do set "antivirus=%%~A"

if /i "!antivirus:~,12!" == "DisplayName=" set "antivirus=!antivirus:~12!"

call :print Antivirus "!antivirus!"
exit /b

:cpu
for /f "tokens=1,* delims==" %%A in ('wmic cpu get name^, status /value') do (
    call :print "%%~A" %%B
)
exit /b

:fsutil
setlocal enabledelayedexpansion
2>nul >nul net session || exit /b

for /f "tokens=1,* delims=:" %%A in ('2^>nul fsutil volume diskfree %1') do (
    set "name=%%~A"
    set "value=%%~B"
    call :print "!name:bytes=GBs!" !value:~,-9!
)
exit /b