2014-07-04 3 views
1

Je dois télécharger un fichier qui est placé dans un dossier appelé abc_20140221_123456 dans server1 sur ftp dans mon répertoire local. Le problème est que les derniers six caractères du nom de dossier ne sont pas corrigés. Par exemple, aujourd'hui, le dossier peut être appelé abc_20140221_123456 et demain, il peut s'appeler abc_20140221_234567. J'ai des problèmes en écrivant un manuscrit de traitement par lots d'automation pour faire la même chose.Téléchargement de fichier à partir du serveur via FTP

est ici le script, je travaille sur:

@echo off 
setlocal 
set buildDate=%DATE:~0,10% 
set dateStr=%buildDate:~6,4%%buildDate:~3,2%%buildDate:~0,2% 
set folderName=abc_%dateStr%_ 
echo open server1>>file.tmp 
echo username>>file.tmp 
echo password>>file.tmp 
echo prompt>> file.tmp 
echo binary>>file.tmp 
echo lcd E:\>>file.tmp 
:: Not sure how to cd to abc_20140221_* from here 
echo get filename.txt>>file.tmp 
echo y>>file.tmp 
echo disconnect>>file.tmp 
echo bye>>file.tmp 
ftp -i -s:file.tmp 
pause 

Je sais que je peux boucle à travers les répertoires en utilisant pour comme ceci:

for /d %%d in (' %path%/*%folderName%* ') do (
echo get filename.txt>>file.tmp 
echo y>>file.tmp 
) 

Mais « pour » ne fonctionne pas à l'intérieur ftp> .

Toute aide est fortement appréciée. Merci.

+0

Est-ce que 'cd abc_20140221_ *' fonctionne sur votre serveur FTP? La manière habituelle sera d'ouvrir une connexion et de consigner une commande 'dir' dans un fichier texte, puis d'analyser le fichier texte pour le nom du dossier - et de créer un script à la volée pour ouvrir une nouvelle connexion pour le téléchargement. – foxidrive

+0

J'ai juste essayé de le faire, mais cd abc_20140221_ * ne fonctionne pas dans l'invite ftp. Je comprends ce que vous essayez de dire. Mais existe-t-il un moyen plus simple de le faire? –

+0

Non, car FTP ne permet pas de changer de dossier en utilisant des jokers comme vous l'avez essayé. Vous pourriez être en mesure d'utiliser un outil FTP tiers qui a des fonctionnalités supplémentaires telles que celle-ci, mais Windows FTP est limité. – foxidrive

Répondre

0

Je suppose que pour une date donnée il n'y a qu'un seul répertoire abc_YYYYMMDD_nnnnnn.

@echo off 
setlocal 
set buildDate=%DATE:~0,10% 
set dateStr=%buildDate:~6,4%%buildDate:~3,2%%buildDate:~0,2% 
set folderName=abc_%dateStr%_ 
set root=E: 
echo open server1>file.tmp 
echo username>>file.tmp 
echo password>>file.tmp 
echo prompt>> file.tmp 
echo binary>>file.tmp 
for /D %%D in (%root%\%foldername%??????) do set target=%%D 
echo lcd %target%>>file.tmp 
echo get filename.txt>>file.tmp 
echo y>>file.tmp 
echo disconnect>>file.tmp 
echo bye>>file.tmp 
ftp -i -s:file.tmp 
pause 

Je mis root à E:\ en fonction de votre script original - vous pouvez le modifier à tout le répertoire parent réel est. J'ai aussi changé

echo open server1>>file.tmp 

à

echo open server1>file.tmp 

il crée un nouveau fichier temporaire. Sinon, il continuera d'être ajouté à file.tmp chaque fois que le script s'exécutera. Si c'est ce que vous voulez, ou si vous générez un nom de fichier script unique à chaque fois et que vous utilisez simplement file.tmp comme espace réservé, ignorez cette modification et utilisez >> comme précédemment.

S'il y a plus d'un dossier pour un jour donné, je crois que ce script utilisera celui qui apparaît en dernier lorsque les caractères génériques sont développés. Cependant, je n'ai pas testé cela.

Questions connexes