windows - Batchfil accepterer ikke parameter i form af\% 1,\% 2

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et simpelt script, der gør ftp upload, det vigtigste er, at jeg vil sende parametre som værtsnavn, brugernavn, adgangskode osv. Til filen bat.


Dette er mit script


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


Nu, når jeg kalder scriptet fra kommandolinjen og passerer i \%1, \%2 ... bliver indholdet \%1, \%2 ikke erstattet af min kommandolinje parametre. Dette er min kommandolinje:


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


I stedet for \%1 bliver first, \%2 second og så fortsætter \%1 \%1, så i det væsentlige åbner jeg en ftp side med navnet \%1, som er helt uanstændigt.


Noget jeg gør forkert?

Bedste reference


Det er fordi, på det punkt, hvor du faktisk behandler filen, er det ikke et batch script overhovedet.


Det er et FTP script, som ikke gør nogen af ​​den fancy substitution.


Du kan få den ønskede effekt med en midlertidig fil (baseret på den oprindelige fil for at undgå sammenstød) således:


@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


Linjen type er der til debugging. Når du er tilfreds med scriptet, skal du ændre:


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


til:


ftp -i -s:"\%tmpfl\%"

Andre referencer 1


Problemet er, at du 'overfører den pågældende fil til ftp'en som et sæt kommandoer med -s-omskifteren -'\% ~ f0 'udvides til at være det fuldt kvalificerede filnavn for batchfilen. Som følge heraf er ftp-klienten Parsing filen er ordentlig, den erstatter ikke\% 1,\% 2 osv med parametrene. Det gøres af batch-filhåndtereren, ikke ftp-klienten.


Hvad du kan prøve, er at skrive en midlertidig fil ved hjælp af 'echo open\% 1> temp.txt' osv., Og brug derefter det som input til ftp-klienten.


Følgende ser ud til at virke godt nok på mit system:


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