2017-10-16 16 views
1

Ceci est mon code pour obtenir la date du serveur hier.Comment télécharger le fichier hier à SFTP en utilisant le fichier .bat et WinSCP?

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set /A "DD=(%dt:~6,2%)-1" 
set datestamp=%YYYY%%MM%%DD% 
set RunDate=%datestamp% 

Cependant, je suis en train d'ajouter cette condition dans cette syntaxe:

"C:\Program Files (x86)\WinSCP\winscp.com" /console^
    /command "open sftp://Username:Password]@port" "cd /Dir" "put Dir\.CSV file" pause exit 

Il sera donc:

C:\Program Files (x86)\WinSCP\winscp.com /console /command 
open sftp://USER:PASS]@IP 
cd Dir 
@echo off 
setlocal 
del Dir\Script.txt 
echo User>>Dir\Script.txt 
echo Pass>>Dir\Script.txt 
echo passive>>Dir\Script.txt 
echo prompt>>Dir\Script.txt 
echo cd Dir>>Dir\Script.txt 
echo binary>>Dir\Script.txt 

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do 
set 
"dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set /A "DD= 
(%dt:~6,2%)-1" 
set datestamp=%YYYY%%MM%%DD% 
set RunDate=%datestamp% 
echo %RunDate% 
echo put Dir_%RunDate%.csv>>Dir\Script.txt 

echo close>>Dir\Script.txt 


pause 
exit /b 

J'essaye d'ajouter la variable: %RunDate% à n'importe quel dossier de .csv (date d'hier avec le format) pour le télécharger au SFTP.

+0

On ne sait pas, ce que vous voulez faire. Voulez-vous télécharger tous les fichiers '.csv' dont les noms de fichiers incluent la date actuelle? C'est à dire. 'aaa20171016.csv',' bbb20171016.csv', etc? –

+0

Salut Martin, Merci pour la réponse. Je voudrais télécharger un fichier qui a une valeur de date d'hier. Exemple de nom de fichier: Data_Country_20171015.csv. – MerCal

+0

Donc il y a toujours un seul fichier avec la date d'hier? –

Répondre

1

Tout d'abord, votre code pour calculer la date d'hier n'est pas fiable. Ça ne marchera pas le 1er d'un mois. Par exemple le 1er Octobre, il produira une date non valide 20171000, au lieu de la correcte 20170930.


Vous pouvez réellement use WinSCP itself to calculate the yesterday date manière plus facilement et surtout fiable:

set TIMESTAMP_FORMAT=yyyymmdd 
set TIMESTAMP_RELATIVE=-1D 

for /F "tokens=* USEBACKQ" %%F in (
    `winscp.com /command "echo %%TIMESTAMP%TIMESTAMP_RELATIVE%#%TIMESTAMP_FORMAT%%%" "exit"` 
) do set TIMESTAMP=%%F 

echo %TIMESTAMP% 

Bien même qui est en fait pas nécessaire, comme WinSCP peut télécharger des fichiers Yesterdays sur son propre (en utilisant la même %TIMESTAMP% syntax comme montré ci-dessus):

"C:\Program Files (x86)\WinSCP\winscp.com" /command^
    "open sftp://username:[email protected]/"^
    "cd /remote/path"^
    "put *%%TIMESTAMP-1D#yyyymmdd%%*.csv"^
    "exit" 

Ceci est partiellement base d sur l'article WinSCP Uploading the most recent file.


notes secondaires:

0

J'ai essayé la suggestion, mais je n'ai pas réussi à l'intégrer à mes codes.

Ce lien m'aide à déclarer correctement une date d'hier comme vous le conseillez pour avoir un calcul fiable: How to get and display yesterday date?.

Qu'est-ce que je mets en œuvre est que la valeur de% AWSDT% est remplacé par% RunDate%