我正在编写搜索信息的代码。我使用wmic。
但是有些不对劲。我没有得到txt文件中的计算机的结果。
这是我创建的代码:
@echo off
title Check software
color 1f
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%
set timestamp=Datum-%YYYY%%MM%%DD%--Tijd-%HH%%Min%%Sec%
set txt=results--%timestamp%.txt
if exist "1e-client" (
echo Check: Map aanwezig
goto :checkfolder
) else (
echo Check: Map NIET aanwezig
echo Map 1e-client maken...
mkdir "1e-client"
goto :checkfolder
)
:checkfolder
FOR /F "tokens=*" %%I in (list.txt) do call :pinger %%I goto :eof
:eof
move %txt% 1e-client
exit
:pinger
ping -4 -n 1 -w 1000 %1
if not errorlevel 1 set pingstatus=Ja
if errorlevel 1 set pingstatus=Nee
echo Computer: %1 >> %txt%
Echo Online: %pingstatus% >> %txt%
wmic /node:%1 /output:c:\tmp.txt product get name,version |findstr /c:"1E NomadBranch" c:\tmp.txt > %txt%
ping 1.1.1.1 -n 1 -w 100 >nul
echo 1eClient Geinstalleerd: %client% >> %txt%
echo 1eClient versie; >> %txt%
type tmp.txt >> %txt%
更新。这是WMIC创建的列表。我需要找到“1E NomadBranch”并将其导入%txt%文件。
Compatibility Pack for the 2007 Office system 12.0.6514.5001
Microsoft Office Visio Viewer 2007 12.0.4518.1014
Microsoft Software Update for Web Folders (English) 14 14.0.6029.1000
Microsoft Office OneNote MUI (English) 2010 14.0.6029.1000
Microsoft Office Standard 2010 14.0.6029.1000
Microsoft Office Shared Setup Metadata MUI (English) 2010 14.0.6029.1000
Microsoft Office Excel MUI (English) 2010 14.0.6029.1000
Microsoft Office PowerPoint MUI (English) 2010 14.0.6029.1000
Microsoft Office IME (Japanese) 2010 14.0.4763.1000
1E NomadBranch 5.0.100
Microsoft Office IME (Korean) 2010 14.0.4763.1000
Microsoft Office IME (Chinese (Traditional)) 2010 14.0.4763.1000
Microsoft Office IME (Chinese (Simplified)) 2010 14.0.4763.1000
Microsoft Office Publisher MUI (English) 2010 14.0.6029.1000
Microsoft Office Outlook MUI (English) 2010 14.0.6029.1000
Microsoft Office ProofMUI (English) 2010 14.0.4763.1000
Microsoft Office Word MUI (English) 2010 14.0.6029.1000
Microsoft Office Proofing Kit 2010 14.0.4763.1000
Microsoft Office Access Runtime 2010 14.0.4763.1000
Microsoft Office Access Runtime MUI (English) 2010 14.0.4763.1000
Microsoft Office Proofing (English) 2010 14.0.6029.1000
Microsoft Office Shared MUI (English) 2010 14.0.6029.1000
Microsoft Office Proof (Italian) 2010 14.0.4763.1000
Microsoft Office Proof (Catalan) 2010 14.0.4763.1013
Microsoft Office Proof (Dutch) 2010 14.0.4763.1000
Microsoft Office Proof (German) 2010 14.0.4763.1000
Microsoft Office Proof (English) 2010 14.0.6029.1000
Adobe Flash Player 10 ActiveX 10.1.85.3
Microsoft redistributable runtime DLLs VS2010 SP1 (x86) 10.0.40219.1
Microsoft Visual C++ 2005 ATL Update kb973923 - x86 8.0.50727.4053 8.0.50727.4053
Microsoft .NET Framework 3.0 Service Pack 2 3.2.30729
OFFICE 2010 STANDARD P1 14.01.00.00
Microsoft redistributable runtime DLLs VS2008 SP1(x86) 9.0
WINZIP US V14.05.00.00.00 14.05.00.00
Configuration Manager Client 5.00.7804.1000
Microsoft .NET Framework 3.5 SP1 3.5.30729
Microsoft .NET Framework 4 Client Profile 4.0.30319
Microsoft .NET Framework 4 Extended 4.0.30319
答案 0 :(得分:1)
我建议你改变
FOR /F "tokens=*" %%I in (list.txt) do call :pinger %%I goto :eof
:eof
move %txt% 1e-client
exit
到
FOR /F "tokens=*" %%I in (list.txt) do call :pinger %%I
move %txt% 1e-client
exit
因为:eof
是一个特殊标签,意思是“文件结束”。它不应该在批处理文件中分配。
此外 - 似乎没有任何目的。如果您已编码
FOR /F "tokens=*" %%I in (list.txt) do call :pinger %%I&goto :eof
然后在处理list.txt
中的第一行后批处理应该已经终止。按照目前的情况,goto
应该只是:pinger
和:eof
未使用的第三个参数的未使用的第二个参数。
就个人而言,除了goto label
(特殊条件)之外,我只使用goto :eof
(无冒号)来避免这个问题。
我相信问题的真正原因在于:
Echo Online: %pingstatus% >> %txt%
wmic /node:%1 /output:c:\tmp.txt product get name,version |findstr /c:"1E NomadBranch" c:\tmp.txt > %txt%
ping 1.1.1.1 -n 1 -w 100 >nul
这将回显txt
文件,然后运行wmic并将其输出发送到c:\temp.txt
(因为您指定/output
)并将屏幕输出发送到findstr,这也是要阅读c:\temp.txt
,这可能会在当时打开...然后将其全部关闭,然后您将findstr
输出重定向到新 {{1} (因为您使用的是txt
重定向器create new
,而不是>
重定向器append
。
我建议
>>
...但我承认没有测试过。
答案 1 :(得分:1)
以下这一行有错误 - 你纠正了吗?
而不是这个
FOR /F "tokens=*" %%I in (list.txt) do call :pinger %%I goto :eof
使用它(假设术语中没有空格等)
FOR /F "tokens=*" %%I in (list.txt) do call :pinger %%I&goto :eof
这假设您只想处理list.txt