Forum Clubic

Condition repertoire vide

Bonjour,

Je suis en train de créer un fichier batch qui au démarrage de Windows vérifie si le pc portable est connecté au serveur et dans ce cas rapatrie les fichiers d’un répertoire du portable directement sur le serveur.
Par contre je voudrais rajouter une condition dans mon batch, si le répertoire source du pc portable est vide le batch doit s’interrompe. Cette condition est importante car le batch pose la question du repertoire cible a chaque démarrage alors que souvent le repertoire source est vide.

Fichier batch d’essai :

color 70
if not exist “C:\Documents and Settings\julien.REBI0\Bureau\scan” Goto 1
SET /p VAR1=Nom du collaborateur:
Move /-Y “C:\Documents and Settings\julien.REBI0\Bureau\Scan*.*” “C:\Documents and Settings\julien.REBI0\Bureau\Repertoire”%var1%""
pause
:1

Merci de vos réponse
Edité le 23/10/2007 à 16:17

A quoi correspond le “C:\Documents and Settings\julien.REBI0\Bureau\scan” que tu testes ?
Comment fais-tu la relation avec le pc portable ?

Salut,

Conformément à la charte du forum prog, peux-tu préciser le langage dans le titre de ton sujet en éditant ton 1er message et en remplissant le champ tag avec une des valeurs prédéfinies ?

Merci de ta compréhension. :jap:

En faite c’est tout bète, je travail dans un cabinet comptable quand on est en deplacement on fait des scans qui sont mis dans un repertoire et mon patron veut que les fichiers de ce repertoire soit transféré de façon automatique (pour eviter les oublis).

En rentrant on branche simplement le portable sur le reseau, le batch demarre avec windows mais en faite je ne dois pas tester le C:\ comme sur mon fichier d’exemple mais le disque dur S:\ du serveur (c’etait juste pour voir si ça marchait) .

Et avec S: ça marche ?

Oui sans probleme, j’ai refais le batch avec les vrais données.

color 70
if not exist “S:\Scan” Goto 1
SET /p VAR1=Nom du collaborateur:
Move /-Y “C:\Documents and Settings\julien.REBI0\Bureau\Scan*.*” “S:\Scan”%var1%""
pause
:1

Le lecteur S:\ apparait seulement sur le réseaux, le portable est automatiquement connecté sur le serveur grace au wifi quand on est au cabinet.
Il me manque seulement a ne pas executer le batch si le repertoire scan du portable est vide.

Je suis désolé de ne pas etre plus clair.
Edité le 23/10/2007 à 10:21

Quand tu dis ne pas exécuter le batch, tu veux dire ne pas exécuter la partie Set … Move… ?
Il faut que tu testes par rapport à un nom de fichier, même générique, du genre *.doc ou *.xls.
Avec . ca ne marche pas, sans doute parce que ton répertoire contient toujours au moins . et

Je veux dire de que la fenetre se ferme sans appeler la variable, sinon a chaques demarrages du portable au cabinet, le batch va demander le nom du collaborateur (pour copier au bon endroit) alors qu’il n’ya pas de fichier a copier.

Comme tu dis avec . ça marche pas, j’avais penser a une solution en regardant la taille du dossier mais je suis incapable de la mettre en place

tu n’as pas au moins un type de fichier dont tu es sûr qu’il existera dans le répertoire à chaquefois qu’il y a quelque chose à récupérer, pour faire le test avec *.extension ?
Sinon, tu as aussi le vbs (ou powershell)

Les fichiers seront a 90% des .pdf ou des .tif (c’est des scans).

Donc pas facile de faire comme ca.
Ce qu’il faudrait, c’est compter le nombre de fichiers “utiles” (non cache/non systeme), mais là, comme je le disais plus haut, je pense qu’il faut passer par le vbs

Edit: en y réfléchissant bien, il doit aussi y avoir une solution via les variables d’environnement, avec l’option de calcul /A
Edité le 23/10/2007 à 14:19

Ok je suis ouvert a toutes propositions, mais je ne connais pas le VBS, si t’as une proposition a me faire je suis tout ouie.

Je te remercie de ton aide ça m’evite de chercher des solutions qui n’existe pas

En fait, tu peux t’en sortir en batch de la manière suivante :

Fichier batch d’essai :
color 70
set n=0
for %%I in ( “C:\Documents and Settings\julien.REBI0\Bureau\scan*.*”) set /A n=%n%+1
if %n%==0 goto :eof

SET /p VAR1=Nom du collaborateur:
Move /-Y “C:\Documents and Settings\julien.REBI0\Bureau\Scan*.*” “C:\Documents and Settings\julien.REBI0\Bureau\Repertoire”%var1%""
pause

Le comptage set /A n=%n%+1 ne te donnera pas le nombre de fichiers de ton répertoire comme on pourrait s’y attendre, mais il sera nul si le répertoire est vide, et vaudra 1 dans le cas contraire. Mais dans ton cas, cela suffit largement.
Après, il n’y a plus qu’à rajouter un test et la suite conditionnelle.

Le probleme est le fichier batch se termine sur la ligne suivante :

for %%I in ( “C:\Documents and Settings\julien.REBI0\Bureau\scan*.*”) set /A n=%n%+1

tu peux être plus explicite ?
il y a un message d’erreur ?

Rien la fenetre se ferme sur cette ligne, par contre si je passe par cmd ça m’écrit que %%I etait inattendu.

Je suis désolé de te faire perdre ton temps, je crois que je vais simplement dire a mon patron que c’est pas possible :stuck_out_tongue:

%%I etait inattendu.

exact, je me suis planté dans la recopie de ma formule
for %%I in ( “C:\Documents and Settings\julien.REBI0\Bureau\scan*.*”) do set /A n=%n% + 1

Ok cette fois ça fonctionne, merci de ton aide sans toi j’aurais pas fais grand chose. :super:

:jap: