Question

Un script de travail qui déplace divers fichiers en fonction du nom de fichier s'exécute avec succès.Une fois le script terminé, il vérifiera dans deux répertoires tous les fichiers persistants en utilisant IF EXIST *.txt.Cela fonctionne très bien, sauf que j'ai remarqué certains fichiers sans extension.Ce n'était pas un problème auparavant et comme cela ne peut pas être résolu en raison de processus hors de mon contrôle, je dois modifier mon script.

Ma seule idée est le code suivant.Attendez car il y a deux conditions :

:check1
PUSHD "\\UNC\path1" &&(
DIR /A-D *.
IF %errorlevel% NEQ 0 GOTO check2
) & POPD

:add1
ECHO Add note to the log file

:check2
PUSHD "\\UNC\path2" &&(
DIR /A-D *.
IF %errorlevel% NEQ 0 GOTO laststep
) & POPD

:add2
ECHO Add note to the log file

:laststep
Some other code before exiting

Cela devrait fonctionner DIR sur le chemin et si des fichiers sans extensions existent, il aura %errorlevel% zéro et passer au contrôle suivant.S'il y a Non fichiers présents, il aura %errorlevel% pas zéro (probablement 1) et il ajoutera du texte au journal avant la prochaine vérification.Vérifiez deux fera la même chose.

Cela semble terriblement compliqué et je ne parviens pas à trouver une solution « one-liner » aussi simple que IF EXIST.Je réalise que je peux utiliser *. mais cela renvoie également des répertoires et peut entraîner une erreur %errorlevel%.

Code mis à jour

Là où je définis normalement mes variables, je SET les deux chemins à parcourir DIR contre.De cette façon, ils peuvent être utilisés plus facilement ailleurs et Je contourne l'erreur UNC Path que j'obtiens normalement - les raisons me sont inconnues.La vérification des fichiers mise à jour, utilisée uniquement pour les fichiers sans extension, est :

DIR %p1% /b /a-d|FIND /v "." && ECHO Found 1 >> %log%
DIR %p2% /b /a-d|FIND /v "." && ECHO Found 2 >> %log%
FINDSTR /I "Found" %log%
IF %errorlevel% EQU 0 GOTO stillthere

:nofiles
Some code
GOTO domore

:stillthere
Some code

:domore
Other code before exit

Merci pour vos réponses, j'en ai tiré des leçons.

Était-ce utile?

La solution

Est-ce ce que vous voulez trouver ?

dir /b /a-d |find /v "."

Autres conseils

@ECHO OFF
SETLOCAL
:check1
PUSHD "u:\path1"
DIR /A-D *. >NUL 2>NUL
IF %errorlevel% EQU 0 ECHO Add note \path1 to the log file
POPD

PUSHD "u:\path2"
DIR /A-D *. >NUL 2>NUL
IF %errorlevel% EQU 0 ECHO Add note \path2 to the log file
POPD

:laststep
:: Some other code before exiting

GOTO :EOF

Vos problèmes incluent :

Dans une instruction de bloc (a parenthesised series of statements), le entier le bloc est analysé et alors réalisé.N'importe lequel %var% dans le bloc sera remplacé par la valeur de cette variable au moment où le bloc est analysé - avant l'exécution du bloc - la même chose s'applique à un FOR ... DO (block).

Ainsi, IF (something) else (somethingelse) sera exécuté en utilisant les valeurs de %variables% à l'époque le IF est rencontré.

et vous sautez potentiellement d'un PUSHD/POPD support, ce qui signifierait votre POPD ne restaurera pas nécessairement votre répertoire de départ.

(Notez que j'ai utilisé u:\ plutôt qu'un serveur adapté à mon système)

Vous utilisez déjà && vérifier PUSHD travaillé.Vous pouvez faire la même chose avec votre DIR /-D.Je trouve que cela rend la vie plus facile.De plus, vous souhaiterez probablement masquer tout message d'erreur si *. n'est pas trouvé, d'autant plus que c'est la condition attendue.J'ai également masqué l'affichage de tous les fichiers susceptibles d'être trouvés, mais vous pouvez certainement vous débarrasser de cette redirection.Vous souhaiterez peut-être également masquer le message d'erreur si PUSHD échoue, mais je ne l'ai pas implémenté.

PUSHD "\\UNC\path1" && (
  DIR /A-D *. 1>nul 2>nul && ECHO Add note to the log file
  POPD
)

PUSHD "\\UNC\path2" && (
  DIR /A-D *. 1>nul 2>nul && ECHO Add note to the log file
  POPD
)

ECHO Some other code before exiting
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top