2014-02-17 5 views
0

Я работаю над кодом для поиска информации. Я использую wmic для этого.wmic найти информацию и разместить ее в другом txt-файле

  1. Я спрашиваю с WMIC в «установленных программ» и экспортировать их в tmp.txt
  2. Я хочу, чтобы фильтровать tmp.txt и поместить результаты в другом текстовом документе.

Но что-то не так. Я не получаю результаты для компьютеров в 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% 

Update. Это список I, который создает 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  

ответ

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 специальная метка означает «конец File`. Он не должен быть назначен в пакетном файле.

Также - у него нет цели, где он находится. Если бы вы закодированы

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 на txt (поскольку вы используете перенаправитель create new, >, а не append redirector, >>.

Я предлагаю

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 

... но я признаю то, не проверял это.

+0

Спасибо ваше очень за ответ! Я проверил код. Но проблема в этом. WMIC работает. Но когда я использую FINDSTR, я не получаю никакого результата в файле% txt%. У меня есть tmp txt со всем программным обеспечением. Но как заставить «фильтр» работать и помещать его в% txt%. – Tom

+0

Вам нужно будет опубликовать репрезентативный образец файла temp.txt и описать, какую информацию вы хотите извлечь. – Magoo

+0

Я использую этот код: _findstr "1E NomadBranch" C: \ tools \ testomgeving \ tmp% 1.txt >>% txt%, но он не работает. См. Мой вопрос для списка. – Tom

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

+0

Когда я добавляю & to %% I & GOTO, пакет не может петля. Когда я использую %% I GOTO, он зацикливается. – Tom

+0

Затем удалите 'goto: eof', если вы не хотите разветвляться после первой строки. – foxidrive

 Смежные вопросы

  • Нет связанных вопросов^_^