Пакетное перемещение файлов на фтп (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
но он только скопирует...как (переместить) удалить файлы с локального компьютера с проверкой, что они уже копировались...
|
Код:
#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 была в кавычках?
|
Цитата:
Цитата ~Cash~
Скрипт останавливается на "Получен список файлов для перемещения"
А все из за того что в файле 1.txt создаются строки пути до файлов с пробелами без кавычек... то есть put C:\Users\user\AppData\Local\VirtualStore\Program Files (x86)\ »
|
Код:
"put `"$el`"" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
Тогда строчку подправь
|
Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются :(
|
Цитата:
Цитата ~Cash~
Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются »
|
Проблема в кодировке "us-ascii" там только латиница (ftp.exe криво работает с кириллицей), подогнать скрипт под winscp. Он хавает Unicode
|
Цитата:
Цитата sunnykey
Проблема в кодировке "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
Цитата:
Цитата Iska
Не лучше ли взять пример (второй) от Ильи: PowerShell – работаем с FTP сервером | ILYA Sazonov: ITPro с нативной работой с ftp?! »
|
Надо вспоминать программирование;)
|
Время: 00:05.
© OSzone.net 2001-