дурацкий вопрос по .cmd
От: Константин Л. Франция  
Дата: 18.05.10 15:17
Оценка:
Сюда, тк больше некуда. Собственно вброс — командная строка в венде и вообще всё что вокруг нее — полное говно. Не сомневаюсь, что в линуксе не лучше. Основная проблема — отсутствие нормальной диагностики.

А проблема-то плевая — запускать по расписанию WinSCP, чтобы он ходил и синхронизировал папки.

Скрипт для WinSCP был написан за 2 минуты и выглядел так (script.txt):


# Automatically answer all prompts negatively not to stall
# the script on errors
option batch on

# Disable overwrite confirmations that conflict with the previous
option confirm off

# Connect using a password
# Connect
open %1%
synchronize local %3% %2%

close
exit



%1%, %2%, %3% — параметры скрипта.

Далее был написан скрипт run_download_script.cmd


@echo off
if "%~1" == "" goto usage
if "%~2" == "" goto usage
if "%~3" == "" goto usage

if "%~1" == "/?" goto usage
if "%~1" == "-?" goto usage
if "%~1" == "?" goto usage
if "%~1" == "/help" goto usage

set host=%~1
set script="%~4\download_script.txt"

pause
call winscp.exe /console /script=%script.txt% /parameter %host% "%~2" "%~3"
goto done

:usage
echo Usage: [session name] [remote folder path] [local folder path]

:done




Сразу оговорюсь, что это самое серьезное что я когда-либо писал для .cmd

Далее пишется следующее:


call at 15:55 /interactive "%cd%\run_download_script.cmd" ftp.xxx.net "/temp" "d:/temp/ftptest" "%cd%"


И вот проблемы:
1. если брать в кавычки выделенное (%cd%), то до pause дело не доходит и в чем причина узнать никак нельзя
2. если не брать в кавычки, то переменная script содержит неверный путь, тк в изначальном пути есть пробелы и он обрезается
3. если это все заменить на полные пути и выполнение дойдет до call winscp, то в скрипте для коннекта и синхронизации корректно замениться только имя сессии из %1%, а остальные 2 параметра (локальный и удаленный фолдеры) почему-то нет. Ниже вывод на консоль для этого случая.

C:\WINXP\system32>call winscp.exe /console /script="D:\Sources\XXX-XXX\XXX\trunk\XXX\Database\Backup scripts\download_script.txt" /parameter ft
p.xxx.net "/temp" "d:/temp/ftptest"


и вывод winscp:

Searching for host...
Host does not exist
batch on
confirm off
Connecting to ftp.xxx.net ...
Connected with ftp.xxx.net. Waiting for welcome message...
Connected
Starting the session...
Reading remote directory...
Session started.
Active session: [1] ftp.xxx.net
Comparing...
Local '%3%' <= Remote '%2%'
Nothing to synchronize.
Session 'ftp.xxx.net' closed.
No session.
winscp>


У меня полное непонимание происходящего. Что я упустил? Кому нужны эти убогие инструменты? Или со мной что-то не так?

Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.