Home > How to, Операционни Системи, Софтуер > SCP (PSCP) в Send To менюто на Windows

SCP (PSCP) в Send To менюто на Windows

February 11th, 2009 Leave a comment Go to comments

Тази тема е продължение на PSCP без парола. Без да се направи описаното в нея примерът тук няма да работи с идеята с която е замислен.

Каква е ползата – селектираме един или няколко файла в Explorer, цъкаме десен бутон -> Send To -> My Favourite Remote Location и не пишем парола за пренасянето през SCP. Как става това:

  1. Tрява ни скрипт, който да извиква scp и да обработва както един, така и множество файлове
  2. SCP трябва да е с регистрирани public и private ключове, за да прехвърля без парола

Защо PSCP, а не SCP от Cygwin, например? Отговорът е прост – scp от Cygwin не приема windows пътищата и трябва да се правят извращения с промени на пътищата, за да бъдат в *nix-like формат.

Как да настроим PSCP така, че да не въвеждаме парола при използването му? PSCP без парола. :)

От тук нататък следва по-смислената част. Да започнем с batch скрипта, който ще “хваща” макркираните файлове. При извикване на изпълним файл от Send To менюто на Windows, селектираният файл, или файлове, се подават под формата на параметри със стойност абсолютните пътища в системата до самите тях. Например ако на Desktop-а имам снимка naked-chick.tiff, цъкна с десен бутон на нея и избера нещо от Send To – то на този изпълним файл ще се подаде само един параметър в случая – %USERPROFILE%\Desktop\naked-chick.tiff. Ако са маркирани 2 файла – съответно 2 параметъра и т.н, затова нашият batch трябва да се усеща за тези разлики. Ето го и него:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
:: Path to the PSCP executable
set path.scp=C:\PROGRAMS\bin\pscp.exe
:: Path to the private key file for authentication
set path.auth=%USERPROFILE%\.ssh\pscp.ppk
:: Remote server folder
set path.remote=tmp
:: User name to log on the remote server
set cred.user=my-user
:: Remote server address
set cred.host=my-domain.com

:CP_LOOP
@echo on
%path.scp% -i "%path.auth%" %1 %cred.user%@%cred.host%:"%path.remote%"
@echo off
shift
if "%1" == "" goto END
goto CP_LOOP

:END
pause

Малко обяснение за скрипта:

  1. set нещо-си са променливи – трябва да се сет-нат спрямо всяка индивидуална система
  2. CP_LOOP принципно е безкраен цъкъл, който обхожда всички входни параметри (благодарение на shift) и се прекъсва, след последния валиден параметър
  3. echo on и off са сложени, за да видим резутата от всяко едно прехвърляне
  4. pause накрая мрънка за any key to continue – целта е да видим статусите на спокойствие. Всеки, който го дразни и е сигурен в прехвърлянето може да го разкара
  5. Около %path.scp% и %1 в scp командата умишелно няма кавички!

Записваме този batch с някакво-смислено-име.bat по файловата система, отваряме Send To директорията и правим там shortcut към файла. Шорткътът преименуваме с името, с което искаме да се вижда в Send To менюто и сме готови :)

  1. No comments yet.
  1. No trackbacks yet.