Показать полную графическую версию : [решено] Вставка текста из буфера обмена
idlazarev_alex@vk
05-06-2014, 23:06
Всем салют! нужно вставить текст из буфера обмена в bat, ну т.е присвоить переменную %share%, и при вызывании %share% показывался текст из буфера обмена.
Пример:
echo Ваш текст: %share%
для показа текста из буфера можно использовать:
@ECHO OFF & MSHTA.EXE "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();" 1 | MORE
Pause
только как присвоить переменную я не пойму...
Заранее спасибо!
присвоить переменную »
Может быть — «присвоить переменной»?
@echo off
setlocal
for /f "tokens=2 delims=:" %%i in ('chcp') do (
set sPrevCP=%%i
chcp 1251 >nul
)
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:var s=clipboardData.getData('text'); {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(s)} catch (e){}} close();" ^
1^|more`
) do set share=%%i
chcp %sPrevCP% >nul
if defined share echo [%share%]
endlocal
exit /b 0
idlazarev_alex@vk
06-06-2014, 10:30
Iska, спасибо, что поправили, ну и за скрипт тоже.
нужно вставить текст из буфера обмена »
Строго говоря вариант от коллеги Iska вставит в переменную только последнюю строку текста, ибо много строковых переменных в бат не бывает.
gora, угу.
В принципе сами переменные окружения относятся к этому индифферентно:
With WScript.CreateObject("WScript.Shell")
.Environment("Process").Item("Sample") = "1 строка" & vbCrLf & "2 строка" & vbCrLf & "3 строка"
.Run "cmd.exe /k set Sample"
End With
А вот с пакетными файлами — увы, не попадалось. Есть «финт ушами», создающий многострочную переменную окружения, но и там не всё гладко — вместо CrLf будет только Lf. Ещё неизвестно, что хуже выйдет.
Iska, а как сделать, чтобы в переменной share проверялось наличие ":" и тогда заменялось бы на "."???
Пример: В буфере "1111:1111", а надо, чтобы в таком случае стало бы "1111.1111".
Sisin, опишите Вашу задачу полностью.
Sisin, опишите Вашу задачу полностью. »
@echo off
setlocal
for /f "tokens=2 delims=:" %%i in ('chcp') do (
set sPrevCP=%%i
chcp 1251 >nul
)
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:var s=clipboardData.getData('text'); {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(s)} catch (e){}} close();" ^
1^|more`
) do set share=%%i
chcp %sPrevCP% >nul
if defined share echo [%share%]
endlocal
exit /b 0
Так это она и есть. Только перед if defined share echo [%share%] проверить наличие ":" и заменить на ".". И проверить соответствует ли содержание буфера маске 0000:00:00. Если нет, то выйти.
Или сначала проверить соответствует ли содержание буфера маске 0000:00:00. Если нет, то выйти. Если да, то проверить наличие ":" и заменить на ".".
Sisin, это не задача. Это уже выбранное решение. Я же хочу услышать саму изначальную задачу.
проверить соответствует ли содержание буфера маске 0000:00:00. Если нет, то выйти. Если да, то проверить наличие ":" и заменить на ".". »
Где заменить — в буфере обмена? Что есть «маска 0000:00:00» — цифры?
Где заменить — в буфере обмена? Что есть «маска 0000:00:00» — цифры? »
Чтобы в этот момент if defined share echo [%share%] выводилось бы уже с заменой.
0000:00:00 - только цифры.
Опять Вы не о том, что я хотел бы услышать.
Ну, пробуйте:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('chcp') do (
set sPrevCP=%%i
>nul chcp 1251
)
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:var s=clipboardData.getData('text'); {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(s)} catch (e){}} close();" ^
1^|more`
) do set sShare=%%i
>nul chcp %sPrevCP%
if defined sShare (
echo %sShare%| >nul 2>&1 findstr.exe /i /r /c:"[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]" && (
set sShare=%sShare::=.%
echo [!sShare!]
)
)
endlocal
exit /b 0
DJ Mogarych
05-10-2019, 10:16
Powershell:
$var = Get-Clipboard
if ($var -match ':') {
$var = $var -replace ':','.'
}
Ну, пробуйте: »
Если в буфере 0000:00:00, то работает,
если 000000:00:00 - тоже работает, а не должно.
Проверка по маске нужна, чтобы в буфере не было комбинации отличной от маски. И чтобы выводилось echo "ERROR" в случае несоответствия, а затем exit /b 0.
т.е.
Если буфер соответствует маске 0000:00:00, то заменить ":" на "." и вывести echo [!sShare!] и exit /b 0,
а если нет, то echo "ERROR" и exit /b 0.
DJ Mogarych
05-10-2019, 11:58
Если в буфере 0000:00:00, то работает,
если 000000:00:00 - тоже работает, а не должно. »
$var = Get-Clipboard
if ($var -match "^\d{4}:") {
$var = $var -replace ':','.'
}
else {
write-host -fore red "ERROR!!!1"
}
DJ Mogarych, спасибо, но мне надо исключительно в bat.
Sisin, моя недоработка, приношу Вам свои извинения.
Добавьте в единственной строке то, что помечено выделенным:
echo %sShare%| >nul 2>&1 findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]$" && (
или:
echo %sShare%| >nul 2>&1 findstr.exe /i /r /b /e /c:"[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]" && (
Добавьте в единственной строке то, что помечено выделенным: »
а echo "ERROR" и exit /b 0?
Sisin, если error — тогда не 0.
Попробуйте так:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('chcp') do (
set sPrevCP=%%i
>nul chcp 1251
)
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:var s=clipboardData.getData('text'); {try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(s)} catch (e){}} close();" ^
1^|more`
) do set sShare=%%i
>nul chcp %sPrevCP%
if defined sShare (
echo %sShare%| >nul 2>&1 findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]$" && (
set sShare=%sShare::=.%
echo [!sShare!]
) || (
echo Error
exit /b 2
)
) else (
echo Error
exit /b 1
)
endlocal
exit /b 0
Попробуйте так: »
Огромное спасибо. Все как надо! :clapping:
Iska, подскажите, пожалуйста, почему эта строка:
echo %sShare%| >nul 2>&1 findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]$" && (
имеет ограничение на количество цифр??
например, я хочу увеличить маску до 12345678:12345678:12345678, изменил на:
"^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"
а строка не срабатывает. Вроде ограничений быть не должно.
Если попробовать добавить цифры в маску здесь: http://forum.oszone.net/post-2890775.html#post2890775
то findstr.exe выдает ошибку.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.