Используйте getchar()
перед вызовом второго scanf()
.
scanf("%c", &c1);
getchar(); // <== remove newline
scanf("%c", &c2);
Чтобы извлечь содержимое буфера обмена из вашего пакетного скрипта: нет «чистого» пакетного решения.
Если вы хотите внедрить 100% пакетное решение, вам нужно будет сгенерировать файл другого языка из вашей партии .
Выход трубопровода в буфер обмена предоставляется клипом, как говорили другие. Чтобы прочитать вход из в буфер обмена, используйте инструмент pclip в этот комплект . И там есть много других хороших вещей.
Итак, например, вы проходите онлайн-учебник и хотите создать файл с содержимым буфера обмена ...
c:\>pclip > MyNewFile.txt
или вы хотите выполнить скопированную команду ...
c:\>pclip | cmd
С Vista или выше он встроен. Просто выведите трубку в программу «clip». Вот запись (по мне): http://www.clipboardextender.com/general-clipboard-use/command-window-output-to-clipboard-in-vista В статье также содержится ссылка к бесплатной утилите (написанной мной, я думаю) под названием Dos2Clip, которую можно использовать в XP.
EDIT: Я вижу, что у меня вопрос обратно, мое решение OUTPUTS в буфер обмена, doesn Не читал. извините!
Обновление: вместе с Dos2Clip - Clip2Dos (в том же zip-файле), который отправит текст буфера обмена в stdout. Так что это должно сработать для вас. Источник Pascal включен в zip.
Поскольку все ответы путаются, здесь мой код без задержек или дополнительных окон, чтобы открыть ссылку на поток, скопированную из буфера обмена:
@ECHO OFF
//Name of TEMP TXT Files
SET TXTNAME=CLIP.TXT
//VBA SCRIPT
:: VBS SCRIPT
ECHO.Set Shell = CreateObject("WScript.Shell")>_TEMP.VBS
ECHO.Set HTML = CreateObject("htmlfile")>>_TEMP.VBS
ECHO.TXTPATH = "%TXTNAME%">>_TEMP.VBS
ECHO.Set FileSystem = CreateObject("Scripting.FileSystemObject")>>_TEMP.VBS
ECHO.Set File = FileSystem.OpenTextFile(TXTPATH, 2, true)>>_TEMP.VBS
ECHO.File.WriteLine HTML.ParentWindow.ClipboardData.GetData("text")>>_TEMP.VBS
ECHO.File.Close>>_TEMP.VBS
cscript//nologo _TEMP.VBS
:: VBS CLEAN UP
DEL _TEMP.VBS
SET /p streamURL=<%TXTNAME%
DEL %TXTNAME%
:: 1) The location of Player
SET mvpEXE="D:\Tools\Programs\MVP\mpv.com"
:: Open stream to video player
%mvpEXE% %streamURL%
@ECHO ON
Команда клипа хороша, чтобы передать текст в буфер обмена, но он не может читать из буфера обмена. В vbscript / javascript есть способ чтения / записи буфера обмена, но он использует автоматизацию и невидимый экземпляр, если Internet Explorer сделает это так, чтобы он был довольно толстым.
Лучший инструмент, который я нашел для работы с буфером обмена из скрипта, - это бесплатный инструмент NirCmd от Nirsoft.
http://www.nirsoft.net/utils/nircmd. html
Это похоже на швейцарский армейский нож пакетных команд в одном маленьком файле .exe. Для команд буфера обмена, которые вы бы сказали, например
nircmd clipboard [Действие] [Параметр]
Кроме того, вы можете напрямую ссылаться на содержимое буфера обмена в любой из своих команд, используя переменную ~ $ clipboard $ как аргумент. Nircmd также имеет команды для запуска других программ или команд, поэтому можно использовать его для передачи содержимого буфера обмена в качестве аргумента для других команд партии таким образом.
Действия с буфером обмена:
set - set the specified text into the clipboard.
readfile - set the content of the specified text file into the clipboard.
clear - clear the clipboard.
writefile - write the content of the clipboard to a file. (text only)
addfile - add the content of the clipboard to a file. (text only)
saveimage - Save the current image in the clipboard into a file.
copyimage - Copy the content of the specified image file to the clipboard.
saveclp - Save the current clipboard data into Windows .clp file.
loadclp - Load Windows .clp file into the clipboard.
Обратите внимание, что большинство программ всегда будут писать копию обычного текста в буфер обмена, даже когда они пишут специальную копию RTF или HTML в буфер обмена, но они записываются как контент с использованием другого типа формата буфера обмена, поэтому вы не можете быть доступ к этим форматам, если ваша программа явно не запрашивает этот тип данных из буфера обмена.
Похудение (в новой достаточно новой версии Windows):
set _getclip=powershell "Add-Type -Assembly PresentationCore;[Windows.Clipboard]::GetText()"
for /f "eol=; tokens=*" %I in ('%_getclip%') do set CLIPBOARD_TEXT=%I
powershell
. CLIPBOARD_TEXT
(ближайший способ cmd.exe
сделать захват `
стиля `
] Спасибо @Saintali за то, что PowerShell 5.0 добавляет Get-Clipboard
в командлеты верхнего уровня, поэтому теперь он работает как один лайнер:
for /f "eol=; tokens=*" %I in ('powershell Get-Clipboard') do set CLIPBOARD_TEXT=%I
Это может быть не точный ответ, но он будет полезен для вашего квеста.
Исходное сообщение: Посетите https://groups.google.com/d/msg/alt. msdos.batch / 0n8icUar5AM / 60uEZFn9IfAJ Отвечено на вопрос Роджера Ханта. Ответил Уильям Аллен
. Более простые шаги:
Шаг 1) создать файл 'bat' с именем Copy.bat на рабочем столе с использованием любых текстовых редакторов и копией и прошлым ниже кода и сохраните его.
@ECHO OFF
SET FN=%1
IF ()==(%1) SET FN=H:\CLIP.TXT
:: Open a blank new file
REM New file>%FN%
ECHO.set sh=WScript.CreateObject("WScript.Shell")>_TEMP.VBS
ECHO.sh.Run("Notepad.exe %FN%")>>_TEMP.VBS
ECHO.WScript.Sleep(200)>>_TEMP.VBS
ECHO.sh.SendKeys("^+{end}^{v}%%{F4}{enter}{enter}")>>_TEMP.VBS
cscript//nologo _TEMP.VBS
ECHO. The clipboard contents are:
TYPE %FN%
:: Clean up
DEL _TEMP.VBS
SET FN=
Шаг 2) создайте пустой текстовый файл (в моем случае «CLIP.txt» в H Drive) или в любом месте, убедитесь, что вы обновили путь в файле Copy.bat в разделе «FN = H: \ CLIP.txt» с вашим целевым файловым путем.
Вот и все.
Итак, в основном, когда вы копируете любой текст из любого места и запускаете файл Copy.bat с рабочего стола, он обновляет файл CLIP.txt с содержимым буфера обмена и сохраняет его.
Использует:
I использовать его для передачи данных с удаленных компьютеров, где копирование / вставка отключена между различными соединениями; где общий диск (H :) является общим для всех подключений.