Se connecter avec
S'enregistrer | Connectez-vous

msdos écrire batch

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Bonjour,
Je souhaiteraix savoir si un fichier est archivé ou non. Le code ci-dessous fourni dans la cette liste ne fonctionne pas sur ma machine:
attrib toto.txt
if %ERRORLEVEL% 1 echo fichier archivé
....

voici le message d'erreur :
1 était inattendu.
Merci et très bonne journée
Saïd

Bonjour,
Je souhaiteraix savoir si un fichier est archivé ou non. Le code ci-dessous fourni dans la cette liste ne fonctionne pas sur ma machine:
attrib toto.txt
if %ERRORLEVEL% 1 echo fichier archivé
....

voici le message d'erreur :
1 était inattendu.
Merci et très bonne journée
Saïd
Expert Programmation

Merci de présenter tes extraits de code entre les balises [CODE], comme fait le gros chat gris.

La syntaxe exacte de ERRORLEVEL est :
if %ERRORLEVEL%==1


Malheureusement, la commande ATTRIB ne gère pas ERRORLEVEL.

Batchy connaît sans doute une manière full-DOS pour faire ça. ;) 

Moi, je te propose plutôt de regarder du côté des UnxUtils, en particulier la commande GREP :

ATTRIB toto.txt | GREP -qs ^A
IF %ERRORLEVEL%==1 THEN ECHO Fichier archivé

Maître bachi au secours je ne sais pas comment résoudre mon problème. Avis ) ceux qui le connaisse, parlez lui de mon prob. vous serez bien sympathique.
Pour le moment je n'ai aucun résultat probant. Toutefois, je remercie les personnes qui ont bien voulu m'apporter de l'aide.
A toute.
Saïd
Expert Programmation

arf... c'est vrai.. Attention !
Les expressions
if ERRORLEVEL 1
if %ERRORLEVEL% == 1
ne sont pas équivalentes.

La seconde est facile à utiliser, mais n'existe que sous Win2K et +.
Elle renvoie directement le code de retour de l'application (le fameux int main(.., cher à Emmanuel Delahaye ;) )

La première est vraiment un *niveau* d'erreur. En fait, elle est équivalente à
if %ERRORLEVEL% >= 1
. Disponible sous DOS depuis les premières versions.

Re salut,
ce code ne fonctionne toujours pas.
attrib toto.txt
if ERRORLEVEL 1 echo fichier archivé
Le message n'est pas affiché alors que le fichier est bien archivé. J'ai tapé en mode commande
echo %errorlevel%
le système répond tours 0 quelque soit l'état de l'attibut archive..
A mon avis il faut abandonner la solution du errorlevel car il n'a aucun impact sur la commande attrib.

Je suis conscients que DOS remonte à loin, mais je compte toujours sur vous pour trouver cette solution.
Bonne nuit
Saïd
Expert Programmation

M'enfin, tu lis ce qu'on t'écrit. Si ce n'est pas le cas, dis le tout de suite !
Citation :
1°) Merci de présenter tes extraits de code entre les balises [CODE]
2°) Malheureusement, la commande ATTRIB ne gère pas ERRORLEVEL.

Salut Zeb.
Je lis toujours avec plaisir ce qui est écrit. Je suis dans l'impossibilité d'écrire le code entre les balises.
Bref, reournons à nos moutons.
Pour info je n'ai toujours pas trouvé comment savoir si un fichier est archivé ou non. A mon avis il faudrait trouvé un moyen pour réécrire la commande attrib qui enverrai 1 lorsque le fichier est archivé ou 0 dans le cas contraire.
Merci pour vos différentes propositions.
Saïd
Expert Programmation

Citation :
Salut Zeb.
:)  Salut
Citation :
Je lis toujours avec plaisir ce qui est écrit.
:) 
Citation :
Je suis dans l'impossibilité d'écrire le code entre les balises.
:(  C'est mal. Qu'est-ce qui t'empêche de me foutre ces $*#% de balises CODE ? Clique là dessus
et apprend à te servir du bouton
Citation :
Bref, reournons à nos moutons.
:) 
Citation :
Pour info je n'ai toujours pas trouvé comment savoir si un fichier est archivé ou non.
:(  ATTRIB
Citation :
A mon avis il faudrait trouvé un moyen pour réécrire la commande attrib qui enverrai 1 lorsque le fichier est archivé ou 0 dans le cas contraire.
:(  bis repetitas :
  1. ATTRIB toto.txt | GREP -qs ^A
  2. IF %ERRORLEVEL%==1 THEN ECHO Fichier archivé
Citation :
Merci pour vos différentes propositions.
:)  De rien
Citation :
Saïd
:)  zeb


( 5 :)  pour 3 :( , c'est pas mal )

ATTRIB toto.txt | GREP -qs ^A
IF %ERRORLEVEL%==1 THEN ECHO Fichier archivé


Ce code ne fonctionne pas. Voici le message d'erreur :

grep n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
Après des différentes recherches sur internet j'ai découvert que c'est une commande unix.

remarque : désolé pour les balises, je ne peux vraiment les mettre, un jour Zeb comprendra peut-être pourquoi c'est ainsi.
Bonne soirée les amis.
Saïd
Expert Programmation

Ce code fonctionne. Ici je te dis où trouver la fonction GREP pour Windows.

Encore une fois je répète :
- Merci de lire ce qu'on écrit, une solution a déjà été donnée.
- Merci d'utiliser les balises [CODE]
Expert Programmation

Ah bah oui, c'est le contraire !

ERRORLEVEL est égal à 1 si le fichier n'est pas archivé et à 0 si le fichier est archivé.

Pour s'en convaincre :
ATTRIB toto.txt | GREP -qs ^A
ECHO %ERRORLEVEL%

Salut à tous,
Merci encore pour votre aide. Ca fonctionne très bien.

J'essaie maintenant de comptabiliser les fichiers archivés ayant l'extension xls du répertoire c:\tests. Mais, le code ci-dessous me renvoie une valeur correspondant au nombre de fichiers contenus dans ce répertoire.
Merci pour vos suggestions.
Saïd

[
REM PROGRAMME COMPTABILISANT LES FICHIERS ARCHIVES

@echo off
cls

REM DECLARATION DE LA VARIABLE CONTENANT LE NOMBRE DE FICHIERS ARCHIVES
set /a compteur=0

for %%f IN (c:\tests\*.xls) do (
attrib %%f | GREP -qs ^A
if %errorlevel%==0 set /a compteur+=1
)
@echo %compteur% fichier archivé(s)
pause
set compteur=
]
Expert Programmation

Et le crochet fermant par [/CODE]. (en deux posts pour éviter que les balises soient interprétées)

S'il te prenait l'envie de savoir pourquoi, tu peux toujours lire le topik suivant : Quelques règles simples à respecter -- /!\ A lire avant de poster !

Tu peux aussi choisir parmi une des raisons suivantes :
• Pour respecter les règles,
• Pour montrer ton respect envers les gens qui consultent ce forum,
• Pour faire joli,
• Pour me faire plaisir
• Pour montrer à la face du monde que tu peux tout faire comme les autres.

Comment faire ? Clique simplement sur l'icône .
Ah, je fais du chantage parce que j'ai la solution. Mais elle est tellement évidente que tu vas t'en vouloir de ne pas l'avoir trouvée tout seul.

1. Toutes les raisons sont justifiées et je ne demande qu'à respecter les règles collectives. Mais, en ce qui me concerne je n'ai pas la possibilité de mettre ces balises. Dailleurs j'ai entouré le code de [ ] et cela doit être pris pour un efforrt de ma part.
Remarque: aucun de mes messages ne contien des fantaisies couleurs etc.
2. Avant d'embêter les gens avec mes soucis de programmation je fais différentes recherches personnelles. Et, je poste seulement quand il n'y a plus de pistes.
Voilà.

Bonjour Zeb,
En connaissant la solution à mon problème, pourrais-tu m'indiquer une piste de recherche ou encore mieux ta solution. Rappel de la situation : le code fourni comptabilise les fichiers du répertoire mais ne détecte pas les fichiers non archivés. errorlevel perd sa valeur mais je ne sais pas où et quand ?
Merci.
Expert Programmation

Merci Nova13 de me rappeler à mon devoir :jap:  (Cependant, permets-moi de préciser que le MP concernait un dernier ultimatum pour faire obtempérer nsedrani@freefr :o  ).

Pour que ce topik soit enfin utile à tout le monde, voici l'erreur toute bête qui empêchait le code de nsedrani@freefr de fonctionner.

Contrairement aux habitude sous DOS, la variable ERRORLEVEL doit être écrite en majuscule (C'était très bête, vous en conviendrez)

Donc nsedrani@freefr a encore quelques instants pour modifier ces posts et les mettre en conformité avec les règles du forum et tout loisir de corriger son code.
Lassé par la pub ? Créez un compte