2017-03-17 4 views
0

Je suis relativement nouveau dans les scripts batch. Mon script est simple. J'ai le code jusqu'ici pour définir 2 variables de 2 noms de fichiers qui sont dynamiques (peuvent être différentes chaque fois que le script est exécuté).Script batch Windows: l'utilisation de la variable dans la commande diff ne fonctionne pas

Maintenant, je veux utiliser ces variables dans une commande "diff".

Il peut être pertinent que j'utilise GNU Diffutils

Script au moment:

:Variables 
SET FolderPath=H:\Marketing\Website\DB Files\CSV Outputs 

@echo on 
echo Upload Item Master diff to FTP 
FOR /F "delims=|" %%I IN ('DIR "%FolderPath%\*.csv" /B /O:D') DO SET NewestFile=%%I 
FOR /F "delims=|" %%J IN ('DIR "%FolderPath%\*.csv" /B /O:-D') DO SET OldestFile=%%J 

echo Newest file %NewestFile% 
echo Oldest file %OldestFile% 

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' %OldestFile% %NewestFile% >%FolderPath%\DiffOut\IM-diff.csv 

La sortie au moment est:

.....  
    H:\>echo Newest file DB Item Master table 17-03-17.csv 
    Newest file DB Item Master table 17-03-17.csv 

    H:\>echo Oldest file DB Item Master table 28-02-17.csv 
    Oldest file DB Item Master table 28-02-17.csv 

    H:\>diff --unchanged-line-format= --old-line-format= --new-line-format='OldestFileNewestFileFolderPath\DiffOut\IM-diff.csv 
    diff: missing operand after `--new-line-format='OldestFileNewestFileFolderPath\DiffOut\IM-diff.csv' 
    diff: Try `diff --help' for more information. 

J'ai besoin du script être en mesure de mettre le nom du fichier variable dans la commande, donc:

H:\>diff --unchanged-line-format= --old-line-format= --new-line-format='"DB Item Master table 28-02-17.csv" "DB Item Master table 17-03-17.csv" "H:\Marketing\Website\DB Files\CSV Outputs\DiffOut\IM-diff.csv" 
+1

probablement besoin de doubler le symbole pour cent sur le nouveau format de ligne. Rappelez-vous que les symboles de pourcentage ont une signification particulière. Donc, il voit '% L '%' comme le nom de la variable à développer. Donc, changez '% L' en' %% L' – Squashman

+0

C'est par conception. Le 1> signifie qu'il redirige la sortie standard vers le fichier. Vous ne pouvez pas faire en sorte que cmd.exe ne développe pas le> à 1>. – Squashman

+1

Supprimez votre commentaire avec le code et modifiez votre question. Difficile à lire dans un commentaire. – Squashman

Répondre

0

RESOLU

Merci, en ajoutant le% supplémentaire fait le travail!

Un grand merci à Squashman

(BTW le> problème de sortie était de faire quelque chose d'autre - je trié que OK)