Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Пакетное перемещение файлов на фтп (os windows 8) (http://forum.oszone.net/showthread.php?t=263137)

~Cash~ 25-06-2013 11:57 2173857

Пакетное перемещение файлов на фтп (os windows 8)
 
Цель: создать батник перемещения файлов с локальной папки на фтп сервер только с расширением *.opr

То есть есть некая папка в которую скапливаются файлы. Надо что бы раз в час (ну это я сделаю планировщиком) файлы с расширением .opr перемещались на фтп сервер в кодировке ASCII. Именно перемещались, а не копировались. Возможно ли это сделать стандартным консольным фтп?
Файлы после копирования на сервер забираются от туда в течении часа и поэтому если сравнивать оба файла, то это должно быть на лету.
Сделал я это сторонней утилитой wput.exe,но у нее есть некоторые недостатки
1. Она часто пропускает файлы особенно если их много скопилось и перемещает их не все. То есть 2-3 файла могут месяцами не передаваться потому, что она их тупо не видит наверное.
2. При копировании появляется окно команд которое раздражает работу сотрудников а следовательно и меня

~Cash~ 25-06-2013 13:04 2173903

open
8.8.8.8
login
password
cd Local
ascii
mput l:\temp\*.opr
bye


но он только скопирует...как (переместить) удалить файлы с локального компьютера с проверкой, что они уже копировались...

~Cash~ 01-07-2013 13:56 2177324

ап :clapping:

sunnykey 01-07-2013 16:53 2177456

Код:

#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

~Cash~ 02-07-2013 09:04 2177875

:) Надо переходить на ps )))спасибо!

Скрипт останавливается на "Получен список файлов для перемещения"
А все из за того что в файле 1.txt создаются строки пути до файлов с пробелами без кавычек... то есть put C:\Users\user\AppData\Local\VirtualStore\Program Files (x86)\

как сделать так что бы строчка была после put была в кавычках?

sunnykey 02-07-2013 16:31 2178132

Цитата:

Цитата ~Cash~
Скрипт останавливается на "Получен список файлов для перемещения"
А все из за того что в файле 1.txt создаются строки пути до файлов с пробелами без кавычек... то есть put C:\Users\user\AppData\Local\VirtualStore\Program Files (x86)\ »

Код:

"put `"$el`"" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii
Тогда строчку подправь

~Cash~ 03-07-2013 09:15 2178478

Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются :(

sunnykey 03-07-2013 17:31 2178763

Цитата:

Цитата ~Cash~
Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются »

Проблема в кодировке "us-ascii" там только латиница (ftp.exe криво работает с кириллицей), подогнать скрипт под winscp. Он хавает Unicode

Iska 03-07-2013 17:38 2178773

Не лучше ли взять пример (второй) от Ильи: PowerShell – работаем с FTP сервером | ILYA Sazonov: ITPro с нативной работой с ftp?!

sunnykey 04-07-2013 10:18 2179078

Цитата:

Цитата 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.

Время: 00:05.
© OSzone.net 2001-