2010-10-13 34 views
3

J'essaie d'obtenir un script batch pour vérifier si un dossier contient des fichiers. c'est à ce jour jusqu'où j'ai:Script batch: recherche si un dossier contient des fichiers

IF EXIST %FILEPATH%\%%i\FromGlobus\%FILE% (

%WINZIP% %FILEPATH%\GlobusEOD\ExtraFiles\%ZIPFILE% -m %FILE% 
IF errorlevel 1 goto subBADEND 

) 

%FILE% est *.* mais ce qui se passe est qu'il essaie de fichiers zip même si aucune existe et ne permet donc pas!

Des conseils ou des idées?

Merci

+0

Quelle version de Windows? – snowflake

+0

Toutes les solutions semblent nécessiter l'exécution de 'dir'. Le problème avec ceci est que cela peut prendre un certain temps si le dossier cible contient beaucoup de fichiers/sous-répertoires. – Synetech

Répondre

1

Vous pouvez utiliser quelque chose comme

set VAR=init 
for /f %%a in ('dir /b c:\kk\*.*') do set VAR=exists 
if %VAR%==exists ... 

Pas très efficace dans le cas de grands répertoires, mais il fonctionne.

HTH!

+0

Je l'ai utilisé dans les fichiers batch ... Selon que la réponse @NimeCloud fonctionne ou non, cela fonctionne. Je pense que Nîmes est plus «gracieux». – WernerCD

+1

Il n'y a pas besoin de boucler tous les résultats, vous pouvez sortir de la boucle après le premier en utilisant des étiquettes comme ceci: http://stackoverflow.com/questions/13601015/how-can-i-get-the-first -line-of-the-output-for-given-command-in-dos/13601429 # 13601429 – Sk8erPeter

1

dir . renvoie. .. peut-être ces dirs virtuels causent le désordre. Vous pouvez essayer FIND pipe comme ci-dessous:

SET filter=*.* 
SET notfound="File not found" 

DIR %filter% | FIND %notfound% 
@If ErrorLevel 1 Goto :end 
+0

J'aime cette réponse ... un peu plus facile à suivre que @Belisarius répondre à IMO. – WernerCD

+0

S'il y a un fichier nommé "Fichier non trouvé", ce script échoue :) –

+1

Il échoue également pour '*. *' Car 'dir *. *' Renvoie toujours quelque chose pour tous les répertoires, y compris les répertoires vides, pour lesquels il renvoie ' .' et '..' (il ne retourne rien avec le commutateur'/b', mais cela ne fonctionnera toujours pas puisque ce script recherche l'erreur 'File not found' qui n'est toujours pas retournée). – Synetech

2

Après quelques bricoler avec mes propres scripts

Une variante de @Belisarius' réponse est ce que je l'ai utilisé pendant un certain temps ... Après bricoler un peu, @NimeCloud's version ne semble pas travailler sur ma machine XP ...

Je suis venu avec un mélange des deux qui semble fonctionner pour mes besoins:

%FOLDER%=C:\Temp 
FOR /F %%i in ('dir /b "%FOLDER%\*.*"') DO (goto :Process) 
goto :Exit 

:Process 
... 
... 
... 

:Exit 
exit 
0

Si vous utilisez la commande /A:-D pour dir, le code retour sera inversé si le répertoire contient des fichiers. Fonctionne uniquement pour les fichiers (/A:D ne fonctionnera pas pour les sous-répertoires de la même manière)

dir /A:-D /B "mydir" >nul 2>nul && echo.mydir having files