2016-12-02 1 views
-1

Я бегу за циклами на текст, скопированный с моей веб-страницы работ в текстовый файл. Я нашел копирование из Google Chrome, текстовое содержимое имеет «delims» из «TAB». Если я копирую одну и ту же информацию из Internet Explorer, Delims - это «ПРОСТРАНСТВА», то же самое с Firefox. Затем это изменяет количество токенов и т. Д., И для каждого типа требуется два разных набора кода.delims пробелы и вкладки отличаются от копии веб-страницы

Итак ... (пример)

Chrome

текстовый формат копия

2 Dec 2016 12:37 GMT 194.176.105.169 United Kingdom ID007638.CENTRAL 3.10.6.0 Remove 
2 Dec 2016 12:36 GMT 194.176.105.152 United Kingdom ID007578.CENTRAL 3.10.6.0 Remove 
2 Dec 2016 12:34 GMT 194.176.105.166 United Kingdom ID006715.CENTRAL 3.10.6.0 Remove 

for /F "usebackq tokens=5 delims= " %%J in ("hosts.txt") do @echo(%%J 

Internet Explorer

текстовый формат копия

2 Dec 2016 10:16 GMT 194.176.105.132 United Kingdom ID007643.CENTRAL 3.10.6.0 Remove 
2 Dec 2016 10:16 GMT 194.176.105.133 United Kingdom ID006967.CENTRAL 3.10.6.0 Remove 
1 Dec 2016 17:59 GMT 194.176.105.139 United Kingdom ID006972.CENTRAL 3.10.6.0 Remove 
1 Dec 2016 17:55 GMT 194.176.105.132 United Kingdom ID007574.CENTRAL 3.10.6.0 Remove 

for /F "usebackq tokens=10 delims= " %%J in ("hosts.txt") do @echo(%%J 

Так I C ould выберете пользователя, вы скопировали с хром или IE, Forefox, а затем выполните код xyz, но я предпочел бы, чтобы код смотрел на текстовый файл и каким-то образом видел, что он использует пробелы в качестве разделителей, а затем запускает код для пробелов и делимов, или если он нашел вкладки, то запустите для этого код. Это небольшой проект, который я делаю для своих коллег, и тем меньше они должны делать все лучше. Это возможно? Возможно, запустите команду find в пробелах (?), Затем сделайте X или найдите существование TABS, затем y.

+0

Прочитайте первую строку файла в переменной. Затем замените на вкладке в переменной, чтобы удалить ее и назначить ей новую переменную. Сравните первую переменную с новой. Если они равны, то вы знаете, что нет вкладки. – Squashman

+1

Вы знаете, что параметр 'delims =' по умолчанию равен TAB и SPACE, не так ли? Во всяком случае, основная проблема заключается в том, что в полях данных также есть пробелы; если поля всегда разделены более чем одним SPACE, я думаю о замене трех последовательных SPACE двумя пробелами несколько раз в цикле (количество итераций зависит от максимального количества последовательных SPACES), а затем заменять два последовательных SPACE на одну TAB, затем используйте TAB в качестве единственного разделителя. Совершенно другой подход заключается в использовании позиций персонажа, если каждая строка/поле имеет фиксированную ширину (как показывают примеры) ... – aschipfl

+0

спасибо за это, но вышло из моей лиги, хотя любые примеры были бы замечательными ;-). .. – Tika9o9

ответ

1

Я думаю, этот метод решить вашу проблему:

@echo off 
setlocal EnableDelayedExpansion 

for /F "usebackq delims=" %%a in ("hosts.txt") do (
    for %%b in (%%a) do (
     set "hostname=!version!" 
     set "version=!last!" 
     set "last=%%b" 
    ) 
    echo Hostname: !hostname!, version: !version! 
) 

Этот метод взять последний, но один и «последний но-два» (? Правильно написано) поля строки, разделенные пробелами или ТКС.

EDIT: Новое решение в ответ на комментарии

@echo off 
setlocal EnableDelayedExpansion 

rem Define the fields 
set "field[1]=Version" 
set "field[2]=Hostname" 
set "field[4]=IPaddress" 

rem Show the options 
:start 
cls 
set "choice=" 
for /L %%i in (1,1,7) do (
    set "option=%%i. Extract" 
    for %%j in (1,2,4) do (
     set /A "j=%%i&%%j" 
     if !j! neq 0 set "option=!option! !field[%%j]! and" 
    ) 
    echo !option:~0,-4! 
    set "choice=!choice!%%i" 
) 
echo X. Exit 
echo/ 

rem Get the option and assemble the output format 
choice /C %choice%X /N /M "Select option: " 
set "choice=%errorlevel%" 
if %choice% gtr 7 goto :EOF 
set "output=" 
set "file=" 
for %%j in (1,2,4) do (
    set /A "j=choice&%%j" 
    if !j! neq 0 (
     set "output=!output!^!!field[%%j]!^! " 
     set "file=!file!!field[%%j]! " 
    ) 
) 

rem Read input file and generate output file 
(for /F "usebackq tokens=6*" %%a in ("hosts.txt") do (
    set "IPaddress=%%a" 
    for %%c in (%%b) do (
     for %%d in ("!version!") do set "hostname=%%~Nd" 
     set "version=!last!" 
     set "last=%%c" 
    ) 
    echo %output% 
)) > "%file:~0,-1%.txt" 
start "" "%file:~0,-1%.txt" 
goto start 
+0

Почти! В моей партии пользователь может отображать имя хоста только в текстовом файле, который будет ID007638 (отделен от ID007638.CENTRAL и без запятых и т. Д.). Вариант 2 вывести список типов версий, чтобы список 3.10.6.0 или 3.9.9.4, который когда-либо был. И, наконец, оба вместе просто имя хоста и версия программного обеспечения ID007638 3.10.6.0. Basicall тот же код повторяется, но настраивается, чтобы просто показать небольшие изменения. – Tika9o9

+0

это действительно сработает, я могу отредактировать эхо в тексте с тем, что хочу, а затем использовать код в новом текстовом файле, который имеет оба colomns. Благодарю. Поставит, когда закончу. – Tika9o9

+0

спасибо за это, мне удалось получить что-то работающее, используя это с небольшой настройкой. : _) – Tika9o9

0

Этот код работает в каком-либо формате (скопирована с пробелом или табуляцией delims) вы бросаете на нее он создает разнесенных текстового файла с разделителями со всей извлеченной информации для затем дополнительно допросить ..

копирование и вставка из любого браузера в hosts.txt затем выводить содержимое в другой текстовый файл .... (hosts2.txt)

for /F "usebackq delims=" %%a in ("hosts.txt") do (
    for %%b in (%%a) do (
     set "hostname=!version!" 
     set "version=!last!" 
     set "last=%%b" 
    ) 
    echo !hostname! !version!>>"hosts2.txt" 
) 

тогда я использую ниже, чтобы показать либо «только имя хоста в текстовый файл», «только номер версии в текстовом файле» или как «версию и имя хоста в текстовом файле»

:start 
CLS 
echo. 
echo     ::::::::::::::::::::::::::::::::::::::::::::::::: 
echo     ::  1. Extract Hostnames     :: 
Echo     ::  2. Extract Version     :: 
echo     ::  3. Extract Hostnames and Version  :: 
echo     ::::::::::::::::::::::::::::::::::::::::::::::::: 
echo. 
SET /P "Input= " 
if '%Input%'=='1' (goto run1) 
if '%Input%'=='2' (goto run2) 
if '%Input%'=='3' (goto run3) 

:run1 
> "hostnames.txt" (
     for /F "usebackq tokens=1 delims=." %%J in ("hosts2.txt") do @echo(%%J 
) 
start "" "hostnames.txt" 
goto start 

:run2 
> "version.txt" (
    for /F "usebackq tokens=2 delims= " %%J in ("hosts2.txt") do @echo(%%J 
) 
start "" "version.txt" 
goto start 


:run3 
> "hostnver.txt" (
    for /F "usebackq tokens=1,2 delims= " %%J in ("hosts2.txt") do @(
     for /F "tokens=1 delims=." %%I in ("%%J") do @echo(%%I %%K 
    ) 
) 
start "" "hostnver.txt" 
goto start 
Смежные вопросы