CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Ответить
Аватара пользователя
~Cash~

CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение ~Cash~ »

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



То есть есть некая папка в которую скапливаются файлы. Надо что бы раз в час (ну это я сделаю планировщиком) файлы с расширением .opr перемещались на фтп сервер в кодировке ASCII. Именно перемещались, а не копировались. Возможно ли это сделать стандартным консольным фтп?

Файлы после копирования на сервер забираются от туда в течении часа и поэтому если сравнивать оба файла, то это должно быть на лету.

Сделал я это сторонней утилитой wput.exe,но у нее есть некоторые недостатки

1. Она часто пропускает файлы особенно если их много скопилось и перемещает их не все. То есть 2-3 файла могут месяцами не передаваться потому, что она их тупо не видит наверное.

2. При копировании появляется окно команд которое раздражает работу сотрудников а следовательно и меня
Аватара пользователя
~Cash~

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение ~Cash~ »

open

8.8.8.8

login

password

cd Local

ascii

mput l:\temp\*.opr

bye





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

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение ~Cash~ »

Код:

Код: Выделить всё

#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~

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение ~Cash~ »

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



Скрипт останавливается на "Получен список файлов для перемещения"

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



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

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение sunnykey »

Цитата ~Cash~:



Скрипт останавливается на "Получен список файлов для перемещения"

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






Код:

Код: Выделить всё

"put `"$el`"" | Out-File -FilePath $FtpCmdFile -Append -Encoding ascii

Тогда строчку подправь
Аватара пользователя
~Cash~

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение ~Cash~ »

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

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение ~Cash~ »

Цитата ~Cash~:



Теперь трабла из за попадания в строку имен файлов на русском ...они заменяются вопросами в файле и не копируются
CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)




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

Re: CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)

Сообщение sunnykey »

Цитата sunnykey:



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




Сделал с поддержкой русского языка



Код:

Код: Выделить всё

#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?!
CMD/BAT - Пакетное перемещение файлов на фтп (os windows 8)




Надо вспоминать программированиеИзображение
Ответить

Вернуться в «Скриптовые языки администрирования Windows»