ClipPaste.cmd - быстрая вставка данных в текущую папку

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
User avatar
SlashNet
Posts: 638
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 16 times
Been thanked: 16 times

ClipPaste.cmd - быстрая вставка данных в текущую папку

Post by SlashNet »

Меня всегда разочаровывала невозможность прямой вставки содержимого системного буфера обмена в Проводнике или других файловых менеджерах. Раздражала необходимость открытия Блокнота (или графического редактора), вставки содержимого а затем сохранения. Как говорится, лень двигатель прогресса, поэтому однажды набросал небольшой универсальный батничек для решения этой проблемы.

В процессе запуска определяется что именно находится в буфере обмена, и в зависимости от содержания выполняются различные действия:
  • Если изображение, то создаётся png-файл с именем "Clipboard_ДАТА_ВРЕМЯ.png" содержащим картинку из буфера обмена.
  • Если текст, то создаётся текстовый файл с аналогичным названием, но если в первой строке будет обнаружена http-ссылка, то будет скачена каждая ссылка из буфера обмена (например, если там находится список со ссылками).
Вызов батника я закинул в пользовательское меню и вызываю его оттуда макросом на CtrlShiftV.
start "" /MIN D:\Soft\_Tools_\Utils\ClipPaste.cmd

В качестве вспомогательных утилит используются следующие программы:
  • grep, head, iconv из пакета UnxUtils
  • winclip - из пакета Outwit.
  • nircmd - от NirSoft (в качестве альтернативы можно использовать тот же winclip, но скорость сохранения изображений больших размеров немного удручающая)
  • aria2 - консольная программа для загрузки файлов по сети (в качестве альтернативы можно воспользоваться любой аналогичной программой, которая принимает на вход файл со списком ссылок)
А вот и сам батник (пути к вспомогательным программам доверяю вам исправить самостоятельно):

Code: Select all

@echo off
set binpath=D:\Soft\_Tools_
set tempfile="%temp%\temp_url.txt"
set ftimename=Clipboard_%DATE:/=-%_%TIME::=-%

for /F "usebackq delims=" %%i in (`%binpath%\Utils\winclip.exe -i ^| %binpath%\UnxUtils\grep.exe -E --regexp="CF_TEXT|CF_BITMAP"`) do @set conttype=%%i

if "%conttype%" EQU "CF_BITMAP" goto CF_BITMAP
if "%conttype%" EQU "CF_TEXT"   goto CF_TEXT
echo unknown clip data
goto end

:CF_BITMAP
rem %binpath%\Utils\winclip.exe -p > 000000.ppm
rem %binpath%\Graphics\Xn\XnView\nconvert.exe -clevel 6 -o "%ftimename%.png" -out png 000000.ppm > nul
rem del /q 000000.ppm
%binpath%\NirSoft\nircmd.exe clipboard saveimage "%ftimename%.png"
goto end

:CF_TEXT
for /F "usebackq delims=" %%i in (`%binpath%\Utils\winclip.exe -p ^| %binpath%\UnxUtils\head.exe --lines=1 ^| %binpath%\UnxUtils\grep.exe -E --regexp="http:|https:"`) do @set textline=%%i	
if "%textline%" EQU "" goto mktxtfile
%binpath%\Utils\winclip.exe -p -u -b | %binpath%\Utils\iconv.exe -c -f UTF-16 -t UTF-8 > %tempfile%
start %binpath%\Net\Aria2\aria2c.exe --input-file=%tempfile% --check-certificate=false
goto end

:mktxtfile
%binpath%\Utils\winclip.exe -p -u -b > "%ftimename%.txt"
goto end

:end
rem del /q %tempfile%
echo on
exit
Будьте внимательны: Небольшим недостатком является то что в папке TEMP остаётся файл содержащий ссылки (если они были обнаружены). Это можно решить дополнительными ухищрениями, но мне пока и так нормально (главное не запускать одновременно разные долгоиграющие закачки) так как данная функциональность была добавлена для мелких файлов, которые загружаются моментально.

За три года пользования этим батником обленился настолько, что некоторые картинки сохраняю данным методом а не через стандартный способ через Save As в редакторе изображений. :crazy:

Надеюсь, пригодится и вам. ;)
Last edited by SlashNet on Mon 06 Jun, 2022 15:29, edited 2 times in total.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

ClipPaste.cmd - быстрая вставка данных в текущую папку

Post by Smitis »

SlashNet wrote: Fri 03 Jun, 2022 15:15 winclip - входит в состав ОС Windows начиная, кажется, с Висты.
В состав Винды входит консольный clip.exe, а winclip это уже что-то стороннее. Да и у Вас тоже лежит совсем не в системной папке.
Разум когда-нибудь победит.
User avatar
SlashNet
Posts: 638
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 16 times
Been thanked: 16 times

ClipPaste.cmd - быстрая вставка данных в текущую папку

Post by SlashNet »

Smitis wrote: Mon 06 Jun, 2022 10:45 В состав Винды входит консольный clip.exe, а winclip это уже что-то стороннее.
Спасибо за обнаруженную неточность. Таки перепутал с обычным clip.
Winclip - утилитка из пакета Outwit. Сейчас исправлю.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

ClipPaste.cmd - быстрая вставка данных в текущую папку

Post by siberia-man »

SlashNet wrote: Fri 03 Jun, 2022 15:15 (пути к вспомогательным программам доверяю вам исправить самостоятельно
Это лучше описать в переменной PATH самого скрипта. Так легче поддерживать и шлифовать под себя.
SlashNet wrote: Fri 03 Jun, 2022 15:15 В качестве вспомогательных утилит используются следующие программы
В UnxUtils есть wget (вместо aria2).

А в современном BusyBox есть более современный набор тех же утилит, а еще есть встроенный шелл ash, с помощью которого можно написать более удобный скрипт. И запускать его примерно так как описано на Сером форуме http://forum.script-coding.com/viewtopic.php?id=11535:

Code: Select all

: << '____CMD____'
@echo off
set "PATH=путь\где\лежит\busybox;путь\где\лежит\nircmd;путь\где\лежит\winclip;%PATH%"
busybox sh "%~f0" %*
goto :EOF
____CMD____
#!/bin/sh

текст программы на шелл
Last edited by siberia-man on Tue 07 Jun, 2022 14:19, edited 2 times in total.
Post Reply

Return to “Операционные системы, командные оболочки и прочее”