我有两个本地办公室用户需要扫描文档,然后让它们自动上传到远程终端服务器。我可以设置扫描软件将文件保存到某个文件夹,但我想自动将它们上传到 TS,这样他们就不必离开会话来上传文件。 哪一个是适用于 xp 的好的文件夹监视程序,我可以使用它来自动上传这些文件?
服务器是 Win 2000,我不确定在 Windows 上通常如何完成此操作。我知道我可以使用 WinSCP 作为可编写脚本的 ftp 客户端,但我不知道通常使用什么工具来监视文件夹的更改。直觉告诉我是 Powershell,但我不知道。我的 Python 不够好,我不想在他们的计算机上安装它,但这可能是最后的选择。
---这是我四处寻找后发现的。--- 今天这个及时的线程展示了 Debian Linux 上的一个很好的实用程序(新用户的一个超链接)/questions/50127/当目录内容在 lin 中发生变化时如何自动运行脚本 并且这个线程是我在 serverFault 上找到的最接近的,但却走错了方向。某种来自 FTP 站点的自动下载器?
(META ps 有没有办法删除标签。有一个“uploads”标签应该是“upload”。不需要复数。)
答案1
您可以使用 WinSCP 执行此类自动上传。它通常与 SFTP 或 SCP 一起使用,但它也支持普通 FTP(您的服务器实际上可能能够使用 SFTP 或 SCP),并且可以使用其自动化脚本自动执行此操作:
您正在寻找的具体命令是keepuptodate
:
答案2
问题keepuptodate
是,它执行整个同步,速度很慢。使用一些脚本,可以在修改后仅上传更改的文件。
您可以使用文件夹作为文件夹监视程序。然后使用 Gawk 处理其输出,当然还要使用 WinSCP 进行上传。整个过程可以通过简单的批处理脚本来控制:
REM 本地目录(递归)。REM %CD% - 当前工作目录。必须以 '\' 结尾。设置“localPath=%CD%\”
REM Remote directory, must end with '/'
set "remotePath=/some/remote/directory"
REM Name of the stored session in WinSCP
set "[email protected]"
REM --------------------------------------------------------
REM Escape local path - replace '\' with '\\'.
set "escapedLocalPath=%localPath:\=\\%"
foldermon -lastwrite -subdirs %localPath% | ^
gawk -f autoupload.awk -v "localPath=%escapedLocalPath%" -v "remotePath=%remotePath%" -v "session=%session%" | ^
winscp.com /console | ^
gawk "{ if (!/#aaaaaaaaaaaaaaaaa/) print; }"
当然,你需要那个 gawk 脚本(autoupload.awk
):BEGIN {# 用于修复 foldermon 中错误(功能?)的变量。# 保存文件时,foldermon 会在同一秒内报告两个更改。lastLocalFile = "" lastTime = ""
# Init and connect
print "#remotePath=", remotePath
print "#localPath=", localPath
print "#session=", session
print "option batch abort"
print "option confirm off"
print "open " session
print "option transfer binary"
#print "cd " remotePath
# Flush AWK buffer.
for (i=0; i<41; i++)
print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
{
if (match ($0, /^([:0-9]*) File modified: (.*)$/, matchRow)) {
# File changed.
time = matchRow[1]
file = matchRow[2]
localFile = localPath file
# Don't upload same file twice immediately.
if (localFile!=lastLocalFile || lastTime!=time) {
lastLocalFile = localFile
lastTime = time
# Extract subdirectory from change report and convert '\' to '/'.
match (file, /^((.*[\\])*).*$/, matchPath);
path = matchPath[1]
gsub(/\\/, "/", path)
# Change remote dir and upload.
#print "cd " remotePath path
print "put", localFile, remotePath path
# Flush AWK buffer.
for (i=0; i<41; i++)
print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
}
END {
# Disconnect.
print "close"
print "exit"
}
您可以从以下位置下载包含所有内容的 zip 文件这里。
答案3
我在使用 Strix 提供的自动上传脚本时遇到了一些问题,不得不对其进行一些修改才能与 Sublime Text 3 配合使用(不确定 Sublime Text 2 是否以相同的方式工作)。
如果您遇到他的脚本无法运行或上传空白(以及所有内容)的问题,请使用此修改后的版本替换 autoupload.awk 的中间函数:
{
if (match ($0, /^([:0-9]*) File modified: (.*)$/, matchRow)) {
# File changed.
time = matchRow[1]
file = matchRow[2]
# Sublime Text 2/3 creates several files and appends some temporary characters after the original file name like this: myfile~RF34be688.TMP.
# The original version of this program didn't handle this correctly and uploaded everything to the server
# until you killed the script
# This if statement below handles this by matching for only the lines that have the ~ (tilde chracter)
if ( match (file,/~/) ) {
tildePOS = match (matchRow[2],/~/)
file = substr(matchRow[2], 1, tildePOS - 1)
localFile = localPath file
# Don't upload same file twice immediately.
if (localFile!=lastLocalFile || lastTime!=time) {
lastLocalFile = localFile
lastTime = time
# Extract subdirectory from change report and convert '\' to '/'.
match (file, /^((.*[\\])*).*$/, matchPath);
path = matchPath[1]
gsub(/\\/, "/", path)
# Change remote dir and upload.
#print "cd " remotePath path
print "put", localFile, remotePath path
# Flush AWK buffer.
for (i=0; i<41; i++)
print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
}
}
希望这可以帮助到别人!