Пакетный файл не принимает параметр в виде% 1,% 2 - PullRequest
0 голосов
/ 23 августа 2011

У меня есть простой скрипт, который выполняет загрузку по FTP, главное, чтобы я хотел передать такие параметры, как имя хоста, имя пользователя, пароль и т. Д., В файл bat.

Это мой скрипт

@ftp -i -s:"%~f0"&GOTO:EOF
open %1
%2
%3
!:--- FTP commands below here ---
lcd "%4"
cd  %5
binary
put "%6"
disconnect
bye

Теперь, когда я вызываю скрипт из командной строки и передаю %1, %2 ... содержимое %1, %2 не будет заменено моей командной строкойпараметры.Это моя командная строка:

ftp.bat "first" "second" "third" "forth" "five" "six"

Вместо %1 становится first, %2 становится second и так далее, %1 остается %1, поэтому по сути я открываюсьсторона ftp с именем %1, что совершенно бессмысленно.

Что-то я не так делаю?

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Это потому, что в тот момент, когда вы фактически обрабатываете файл, это вовсе не пакетный скрипт.

Это сценарий FTP, который не выполняет никакой изворотливой замены.

Вы можете получить желаемый эффект с помощью временного файла (на основе исходного файла, чтобы избежать конфликтов), таким образом:

@setlocal enableextensions enabledelayedexpansion
@echo off
set tmpfl=%~f0.tmp
echo>"%tmpfl%" open %1
echo>>"%tmpfl%" %2
echo>>"%tmpfl%" %3
echo>>"%tmpfl%" lcd "%4"
echo>>"%tmpfl%" cd %5
echo>>"%tmpfl%" binary
echo>>"%tmpfl%" put "%6"
echo>>"%tmpfl%" disconnect
echo>>"%tmpfl%" bye
type "%tmpfl%" && rem ftp -i -s:"%tmpfl%"
del /q "%tmpfl%"
endlocal

Строка type для отладки. Когда вы довольны сценарием, измените:

type "%tmpfl%" && rem ftp -i -s:"%tmpfl%"

до:

ftp -i -s:"%tmpfl%"
0 голосов
/ 23 августа 2011

Проблема в том, что вы передаете нужный файл на ftp в виде набора команд с ключом -s - "% ~ f0" расширяется до полного имени файла командного файла.В результате клиент ftp анализирует файл дословно, он не заменяет% 1,% 2 и т. Д. Параметрами.Это делается обработчиком пакетного файла, а не клиентом ftp.

Вы можете попробовать написать временный файл с использованием «echo open% 1> temp.txt» и т. Д., А затем использовать его в качестве входных данных.к клиенту ftp.

В моей системе достаточно хорошо работает следующее:

echo open %1 > temp1.txt
echo %2 >> temp1.txt
echo %3 >> temp1.txt
rem !:--- FTP commands below here ---
echo lcd "%4" >> temp1.txt
echo cd  %5 >> temp1.txt
echo binary >> temp1.txt
echo put "%6" >> temp1.txt
echo disconnect >> temp1.txt
echo bye >> temp1.txt
@call ftp -i -s:"temp1.txt"&GOTO:EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...