什么是winscp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是winscp相关的知识,希望对你有一定的参考价值。

参考技术A

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件,也可以链接其他系统,比如linux系统。

WinSCP的特性

我们先来看看WinSCP都有那些特性:

1、图形用户界面。

2、多语言。

3、与Windows完美集成。

4、支持所有常用文件操作。

5、支持批处理脚本和命令行方式。

6、内置文本编辑器。

7、支持SSH密码、键盘交互、公钥和Kerberos(GSS)验证。

8、通过与Pageant(PuTTY Agent)集成支持各种类型公钥验证。

9、提供Windows Explorer与Norton Commander界面。

10、可选地存储会话信息。

11、可将设置存在配置文件中而非注册表中,适合在移动介质上操作。

WinSCP的操作

接着我们聊具体了解一下WinSCP的操作。WinSCP可以执行所有基本的文件操作,例如下载和上传。同时允许为文件和目录重命名、改变属性、建立符号链接和快捷方式。使用WinSCP可以连接到一台提供SFTP或SCP服务的SSH服务器,通常是UNIX服务器。SFTP包含于SSH-2包中,SCP在SSH-1包中。两种协议都能运行在以后的SSH版本之上。WinSCP同时支持SSH-1和SSH-2。

总的来说,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端,它还有两种界面可供选择。我们可以在安装时选择喜欢的界面,也可以以后改变设置。设计非常合理,大家赶快用起来吧。

WinSCP 命令中的批处理文件 IF 语句语法

【中文标题】WinSCP 命令中的批处理文件 IF 语句语法【英文标题】:Batch file IF statement syntax in WinSCP commands 【发布时间】:2021-06-14 08:52:07 【问题描述】:

我正在尝试更新使用 WinSCP 下载文件的批处理文件。但我不熟悉语法。在以下代码中,IF 语句无法识别。 第一个问题,IF 语句的正确语法是什么?我尝试了几种引号字符的排列组合,但在本示例中已将其删除。 第二个问题,某些行末尾的^ 的目的是什么? 第三个问题,第一行后面的行缩进的目的是什么?

F:\Tools\WinSCP\WinSCP /command="option batch on" ^ "option confirm off" ^ "open WinSCP-ProfileName" ^ 
 "lcd F:\Data\TargetDirectory" ^
 "get ""*_SourceFileName.txt"" %TargetFileName%" ^
 IF %computername%==xxx GOTO LabelElse ^
 "echo do something here" ^
 :LabelElse ^
 "exit" /log=F:\Logs\LogFileName.log

谢谢!

【问题讨论】:

【参考方案1】:

您的整个“批处理文件”实际上是一个 WinSCP 命令行。它只是broken into multiple physical lines using the ^ and the indentation。

您不能在其他命令(本例中为 WinSCP 命令行)中使用批处理命令(如 if)。

如果您需要有条件地修改传递给 WinSCP 的命令,您可以:

必须根据您的标准预先将命令行组装成一个变量,然后立即将其传递给 WinSCP。

或者,更直接的方法是组装一个 WinSCP 脚本文件。

set SCRIPT=%TEMP%\winscp.txt

(
   echo option batch on
   echo option confirm off
   echo open WinSCP-ProfileName
   echo lcd F:\Data\TargetDirectory
   echo get "*_SourceFileName.txt" %TargetFileName%
   IF not %computername%==xxx (
     echo some computer-specific commands here
   )
   echo exit
) > %SCRIPT%

F:\Tools\WinSCP\WinSCP /script=%SCRIPT%  /log=F:\Logs\LogFileName.log

【讨论】:

【参考方案2】:

这似乎是一个模板,您可以根据自己的需要进行调整。

if 语句的语法可以说是正确的,但最好的做法是让它看起来像if "%computername%"=="xxx" goto LabelElse,以防%computername% 有空格或不知何故没有值。 xxx 位将是您不想在其上运行 echo do something here 位的计算机的名称,例如一些后处理或其他东西。

^是批量转义字符,在行尾充当续行字符。我怀疑"option confirm off" ^"open WinSCP-ProfileName" ^ 也应该在他们自己的路线上。有一个标签作为续行的一部分 (:LabelElse) 让我感到惊讶,因为标签必须在自己的行上才能工作。这是一个传递给 WinSCP 的命令这一事实可能使我的担忧无关紧要,但您收到错误的事实表明整个事情的编码不正确。我通常会为 WinSCP 位编写一个单独的脚本并将其作为参数传递。

缩进与^ 是一个续行字符有关,旨在证明以下所有行都与第一行相关。

【讨论】:

【参考方案3】:

感谢这里的建议,我得到了它的工作!我真正想做的是在 Dev 或 UAT 中执行时不要从 sFTP 站点删除文件。效果很好!

IF %computername%==DevServer GOTO LabelElse
IF %computername%==UatServer GOTO LabelElse
  set "DisplayText=WinSCP command - INCLUDES DELETE from sFTP site - for PRODUCTION"
  set "DeleteOption=-delete"
  GOTO LabelEndif
:LabelElse
  set "DisplayText=WinSCP command - DOES NOT DELETE from sFTP site - for *NON-PROD*"
  set "DeleteOption="
:LabelEndif

rem other stuff here

ECHO %DisplayText%
F:\Tools\WinSCP\WinSCP /command="option batch on" ^ "option confirm off" ^ "open WinSCP-ProfileName" ^ "lcd F:\Data\TargetDirectory" ^
"get %DeleteOption% ""*_SourceFileName.txt"" %TargetFileName%" ^
"exit" /log=F:\Logs\LogFileName.log

【讨论】:

好。请注意,^ 在批处理文件中用于转义换行符。所以它不应该在命令之间,你不换行。就像在"option batch on""option confirm off" 之间一样(尽管这两个命令并不是真正需要的,因为它们是默认的)。【参考方案4】:

如果我错了,请纠正我。

常量使用

    %errorlevel% - What is this? %random% - 生成一个随机值。

if 语句的语法:

if %errorlevel% == 0 exit

如果有多个条件。

if %errorlevel% == 1 if %random% == 45398 goto main

main:
echo hello

在上面的代码中,两个语句都为真则代码跳转到Label main。

【讨论】:

您的说法是正确的,但这与问题有什么关系? == 周围的空格是可选的,如果这就是你想要的。

以上是关于什么是winscp的主要内容,如果未能解决你的问题,请参考以下文章

什么是PP,PE.什么是均聚..什么是共聚..什么是嵌段..什么是无规,什么是注塑。什么是吹膜..什

时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?

什么是拉电流,什么是灌电流?什么是吸收电流 ?

在java中,OOA是什么?OOD是什么?OOP是什么?

什么是DIV,全称是什么?

什么是抢占/什么是可抢占内核?到底有什么好处呢?