CMD/BAT - Поиск и копирование части строки из файла

Ответить
Аватара пользователя
slonax82

CMD/BAT - Поиск и копирование части строки из файла

Сообщение slonax82 »

Добрый день! Помогите разобраться, теоретически из файла должно браться только название используемого по умолчанию принтера , но возвращается только один знак из имени или пусто. Соответственно тк перенос имени не целый, далее не выполняется распечатка тест листа. В идеале если строка имеет вид "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

Re: CMD/BAT - Поиск и копирование части строки из файла

Сообщение megaloman »

Код:

Код: Выделить всё

@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

Re: CMD/BAT - Поиск и копирование части строки из файла

Сообщение slonax82 »

Спасибо БОльшое.

Пока думал как получить искомую строку дошел до следующего-



cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnmngr.vbs" -g > "C:\print-scripts\test.txt"

pause

"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

Re: CMD/BAT - Поиск и копирование части строки из файла

Сообщение megaloman »

Цитата slonax82:



cscript "C:\Windows\SysWOW64\Printing_Admin_Scripts\ru-RU\prnqctl.vbs" -e -p "%%a"
CMD/BAT - Поиск и копирование части строки из файла




Я не понимаю эту строку. %%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

Re: CMD/BAT - Поиск и копирование части строки из файла

Сообщение slonax82 »

Это системный скрипт для печати тестового листа 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

Re: CMD/BAT - Поиск и копирование части строки из файла

Сообщение slonax82 »

Ваш вариант допилил-

@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?i...%BE%D0%BA1.JPG




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

[Расширение jpg было запрещено, вложение больше недоступно.]

Аватара пользователя
megaloman

Re: CMD/BAT - Поиск и копирование части строки из файла

Сообщение megaloman »

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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»