Войти

Показать полную графическую версию : Поиск и копирование части строки из файла


slonax82
07-12-2021, 20:50
Добрый день! Помогите разобраться, теоретически из файла должно браться только название используемого по умолчанию принтера , но возвращается только один знак из имени или пусто. Соответственно тк перенос имени не целый, далее не выполняется распечатка тест листа. В идеале если строка имеет вид "Device"="Samsung SCX-4200 Series,Samsung SCX-4200 Series,USB001" извлечь нужно только Samsung SCX-4200 Series (те до запятой- без номера порта). Заранее Спасибо откликнувшимся.


REG EXPORT "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows" "C:\print-scripts\test-R-print.txt" /y
pause

SetLocal EnableExtensions
set "file= C:\print-scripts\test-R-print.txt"
set "search= Device"
for /f "tokens=1 delims=[]" %%a in ('find /i /n "%search%" "%file%" ') do set "header_line=%%a"
if defined header_line (
more +%header_line% "%file%"
) >> "C:\print scripts\test-used-printer.txt"
pause
echo Used Printer= %%a:* >> "C:\print-scripts\test1-used-printer.txt"
pause

cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%%a"
pause

megaloman
07-12-2021, 22:57
@Echo Off
cls
Set "Seek= Device "

Set "header_line="
For /f "tokens=2,* delims= " %%a In ('REG Query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows" ^|Find /I " Device"') Do Set "header_line=%%b"
For /f "delims=," %%a In ("%header_line%") Do Set "header_line=%%a"

Echo %header_line%
Pause
Exit /B

slonax82
08-12-2021, 00:00
Спасибо БОльшое.
Пока думал как получить искомую строку дошел до следующего-

cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnmngr.vbs" -g > "C:\print-scripts\test.txt"
pause
<"C:\print-scripts\test.txt">"C:\print-scripts\test2.txt" (find "ЏаЁ*вҐа Ї® 㬮«з**Ёо"|set /p z=^& call echo %%z:* =%%)
pause

Однако выводится имя в виде Ї® 㬮«з**Ёо Samsung SCX-4200 Series. Подскажите где ошибся? И как прикрутить ваш вариант или мой не рабочий к

cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p ИМЯ ПРИНТЕРА

Заранее Спасибо

megaloman
08-12-2021, 00:16
cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%%a" »Я не понимаю эту строку. %%a вне цикла не имеет смысла. Если Вы хотели, чтобы это было имя принтера, то (с моим вариантом)@Echo Off
cls
Set "Seek= Device "

Set "header_line="
For /f "tokens=2,* delims= " %%a In ('REG Query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows" ^|Find /I " Device"') Do Set "header_line=%%b"
For /f "delims=," %%a In ("%header_line%") Do Set "header_line=%%a"

cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%header_line%"
Pause
Exit /B
Но что при этом получится - не берусь судить, не зная, зачем этот скрипт и как используется.

slonax82
08-12-2021, 01:17
Это системный скрипт для печати тестового листа Windows начиная с 98 и по 11. Последняя строка не может быть выполнена- возвращается с ошибкой(Буду думать как еще реализовать- тест лист). А по моему 2 варианту можете указать на ошибку- давно не приходилось писать, что то подобное- скорее всего со знаками %% перемудрил.

@echo .>C:\print-scripts\used-print.bat
@Echo Off
cls
Set "Seek= Device"
Set "header_line="
For /f "tokens=2,* delims= " %%a In ('REG Query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows" ^|Find /I " Device"') Do Set "header_line=%%b"
For /f "delims=," %%a In ("%header_line%") Do Set "header_line=%%a"
Pause
Echo cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%header_line%">"C:\print-scripts\used-print.bat"
Echo Pause >>"C:\print-scripts\used-print.bat"
Pause
call "C:\print-scripts\used-print.bat"
Pause
Exit /B

Ваш вариант допилил- в результате получаем(165802)

slonax82
08-12-2021, 09:12
Ваш вариант допилил-
@echo .>C:\print-scripts\used-print.bat
@Echo Off
cls
Set "Seek= Device"

Set "header_line="
For /f "tokens=2,* delims= " %%a In ('REG Query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows" ^|Find /I " Device"') Do Set "header_line=%%b"
For /f "delims=," %%a In ("%header_line%") Do Set "header_line=%%a"
Echo cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%header_line%">"C:\print-scripts\used-print.bat"
Echo Pause >>"C:\print-scripts\used-print.bat"
call "C:\print-scripts\used-print.bat"
Pause
в результате получаем распечатку с искомого аппарата. Картинку поправляю https://disk.yandex.ru/client/disk?idApp=client&dialog=slider&idDialog=%2Fdisk%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA1.JPG

PS Пока тему не закрываю- вдруг укажут на мои ошибки во втором варианте.

megaloman
08-12-2021, 20:04
slonax82, Не понимаю, зачем нужны выкрутасы с формированием еще одного батника. Попробуйте:@Echo Off
cls
Set "Seek= Device "

Set "header_line="
For /f "tokens=2,* delims= " %%a In ('REG Query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows" ^|Find /I " Device"') Do Set "header_line=%%b"
For /f "delims=," %%a In ("%header_line%") Do Set "header_line=%%a"

Start " " Wscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%header_line%"
Exit /B




© OSzone.net 2001-2012