Показать полную графическую версию : Пакетное перемещение файлов на фтп (os windows 8)
Цель: создать батник перемещения файлов с локальной папки на фтп сервер только с расширением *.opr
То есть есть некая папка в которую скапливаются файлы. Надо что бы раз в час (ну это я сделаю планировщиком) файлы с расширением .opr перемещались на фтп сервер в кодировке ASCII. Именно перемещались, а не копировались. Возможно ли это сделать стандартным консольным фтп?
Файлы после копирования на сервер забираются от туда в течении часа и поэтому если сравнивать оба файла, то это должно быть на лету.
Сделал я это сторонней утилитой wput.exe,но у нее есть некоторые недостатки
1. Она часто пропускает файлы особенно если их много скопилось и перемещает их не все. То есть 2-3 файла могут месяцами не передаваться потому, что она их тупо не видит наверное.
2. При копировании появляется окно команд которое раздражает работу сотрудников а следовательно и меня
open
8.8.8.8
login
password
cd Local
ascii
mput l:\temp\*.opr
bye
но он только скопирует...как (переместить) удалить файлы с локального компьютера с проверкой, что они уже копировались...
sunnykey
01-07-2013, 16:53
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
$Folder2Ftp="C:\MyFolder\*"
$FileExtMask="*.opt"
$FtpCmdFile="c:\1.txt"
$FileList=Get-ChildItem -Path $Folder2Ftp -Include $FileExtMask -Force
"Получен список файлов для перемещения"
foreach ($el in $FileList) {
"open 8.8.8.8" | Out-File -FilePath $FtpCmdFile -Encoding ascii
"login" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
"password" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
"cd Local" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
"put $el" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
"bye" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
"Команды для отправки файла $el сформированы"
if ((cmd /c ftp -A -s:$FtpCmdFile | Select-String -Pattern "226 Transfer OK" -Encoding ascii) -ne $null) {
"$el скопирован на ftp"
$el | Remove-Item -Force
"$el удалён с диска"
} else {
"Файл $el не скопировался на ftp. Удаления не будет"
}
}
Чтобы не было видно никаких окон создай задание
powershell.exe -WindowStyle Hidden -File c:\myscript.ps1
:) Надо переходить на ps )))спасибо!
Скрипт останавливается на "Получен список файлов для перемещения"
А все из за того что в файле 1.txt создаются строки пути до файлов с пробелами без кавычек... то есть put C:\Users\user\AppData\Local\VirtualStore\Program Files (x86)\
как сделать так что бы строчка была после put была в кавычках?
sunnykey
02-07-2013, 16:31
Скрипт останавливается на "Получен список файлов для перемещения"
А все из за того что в файле 1.txt создаются строки пути до файлов с пробелами без кавычек... то есть put C:\Users\user\AppData\Local\VirtualStore\Program Files (x86)\ »
"put `"$el`"" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
Тогда строчку подправь
Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются :(
sunnykey
03-07-2013, 17:31
Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются »
Проблема в кодировке "us-ascii" там только латиница (ftp.exe криво работает с кириллицей), подогнать скрипт под winscp. Он хавает Unicode
Не лучше ли взять пример (второй) от Ильи: PowerShell – работаем с FTP сервером | ILYA Sazonov: ITPro (http://isazonov.wordpress.com/2009/10/19/powershell-%E2%80%93-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D0%BC-%D1%81-ftp-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%BC/) с нативной работой с ftp?!
sunnykey
04-07-2013, 10:18
Проблема в кодировке "us-ascii" там только латиница (ftp.exe криво работает с кириллицей), подогнать скрипт под winscp. Он хавает Unicode »
Сделал с поддержкой русского языка
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
$Folder2Ftp="D:\dl\*"
$FileExtMask="*.opt"
$FtpCmdFile="c:\1.txt"
$FileList=Get-ChildItem -Path $Folder2Ftp -Include $FileExtMask -Force
$WinSCP="D:\util2flash\winscp.com"
"Получен список файлов для перемещения"
foreach ($el in $FileList) {
"open ftp://login:1@vtest" | Out-File -FilePath $FtpCmdFile
"cd local" | Out-File -FilePath $FtpCmdFile -Append
"put $el" | Out-File -FilePath $FtpCmdFile -Append
"bye" | Out-File -FilePath $FtpCmdFile -Append
"Команды для отправки файла $el сформированы"
if ((cmd.exe "/c $WinSCP /script=$FtpCmdFile" | Select-String -Pattern "100%") -ne $null) {
"$el скопирован на ftp"
$el | Remove-Item -Force
"$el удалён с диска"
} else {
"Файл $el не скопировался на ftp. Удаления не будет"
}
}
Скачай WinSCP (http://sourceforge.net/projects/winscp/?source=dlp)
Не лучше ли взять пример (второй) от Ильи: PowerShell – работаем с FTP сервером | ILYA Sazonov: ITPro с нативной работой с ftp?! »
Надо вспоминать программирование;)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.