[BATCH] Blocage du batch sans erreur
Résolu/Fermé
JEC_noob
Messages postés
9
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
11 octobre 2012
-
10 oct. 2012 à 19:19
Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 - 11 oct. 2012 à 14:33
Nyctaclope Messages postés 5315 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 11 décembre 2022 - 11 oct. 2012 à 14:33
A voir également:
- [BATCH] Blocage du batch sans erreur
- Erreur 0x80070643 - Guide
- Fichier batch - Guide
- Blocage agriculteur carte en temps réel - Guide
- Ce message d'erreur apparaît sur l'ordinateur d'elena. que peut-on dire du programme gwxux ? - Forum logiciel systeme
- Dymo blocage ruban ✓ - Forum Matériel & Système
3 réponses
Nyctaclope
Messages postés
5315
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
11 décembre 2022
1 250
10 oct. 2012 à 19:37
10 oct. 2012 à 19:37
Bonsoir
Il est probable que l'un(e) des programmes/commandes lancé(e)s ne se termine pas , ou attend une donnée ?..
Pour tester, mets des "REM" devant chaque ligne du batch pour la neutraliser, et teste en enlevant après chaque essai le REM de la ligne suivante . Tu verras où cela coince, ensuite il "restera" à trouver pourquoi ..
Tu peux aussi tester le Errorlevel après chaque ligne , ou faire des "echo" provisoires pour afficher les résultats à mesure ..
Cela dépend bien sûr de la structure et contenu de ton batch ..
Dommage que tu ne puisses fournir ton listing, mais cela serait sans doute difficile de le tester ailleurs que sur ton PC ..
A+
Nyctaclope
Il est probable que l'un(e) des programmes/commandes lancé(e)s ne se termine pas , ou attend une donnée ?..
Pour tester, mets des "REM" devant chaque ligne du batch pour la neutraliser, et teste en enlevant après chaque essai le REM de la ligne suivante . Tu verras où cela coince, ensuite il "restera" à trouver pourquoi ..
Tu peux aussi tester le Errorlevel après chaque ligne , ou faire des "echo" provisoires pour afficher les résultats à mesure ..
Cela dépend bien sûr de la structure et contenu de ton batch ..
Dommage que tu ne puisses fournir ton listing, mais cela serait sans doute difficile de le tester ailleurs que sur ton PC ..
A+
Nyctaclope
JEC_noob
Messages postés
9
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
11 octobre 2012
10 oct. 2012 à 19:45
10 oct. 2012 à 19:45
Merci, j'ai fait quelque chose dans le genre et j'ai repéré le problème:
Je veux copier un fichier en remplaçant une ligne du fichier
Je m'y prend ainsi:
Traduction:
-Je copie les ligne 1 a 2 dans le fichier B
-Puis j'écris une ligne
-Puis les je copie les lignes de 4 à 5.
ça! C'est ce qui marche! Mais en vrai le fichier A fait 300000 ligne! est-ce que ça peut poser un problème?
Je veux copier un fichier en remplaçant une ligne du fichier
Je m'y prend ainsi:
for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . A.dat') do ( if %%i geq 1 if %%i leq 2 echo %%j >> B.dat ) echo blabla>> B.dat for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . A.dat') do ( if %%i geq 4 if %%i leq 5 echo %%j >>B.dat )
Traduction:
-Je copie les ligne 1 a 2 dans le fichier B
-Puis j'écris une ligne
-Puis les je copie les lignes de 4 à 5.
ça! C'est ce qui marche! Mais en vrai le fichier A fait 300000 ligne! est-ce que ça peut poser un problème?
JEC_noob
Messages postés
9
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
11 octobre 2012
10 oct. 2012 à 19:50
10 oct. 2012 à 19:50
OU ALORS!!!
ça marche mais ça prend une plombe!!
Je lance le batch et je reviens demain matin!
Mais je reste preneur si quelqu'un a une idée de limite de ligne de la fonction FIND en BATCH!
ça marche mais ça prend une plombe!!
Je lance le batch et je reviens demain matin!
Mais je reste preneur si quelqu'un a une idée de limite de ligne de la fonction FIND en BATCH!
Nyctaclope
Messages postés
5315
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
11 décembre 2022
1 250
Modifié par Nyctaclope le 10/10/2012 à 22:37
Modifié par Nyctaclope le 10/10/2012 à 22:37
Re
Bon, c'est un peu loin pour moi, mais apparemment tout le fichier est parcouru, donc c'est lourd ..
Je ne sais s'il y a une limite pour Find, mais , uniquement par intuition, j'aurais fait deux étapes :
1// stoker les lignes trouvées par findstr dans un fichier tampon via ">>"
2// ensuite le ratisser par le For
j'ai l'impression que cela gagnerait du temps ? car les tests ne sont faits que sur les lignes intéressantes. Mais c'est à voir selon le contenu de ton fichier A.dat
Mais je n'ai peut être pas tout saisi de ta manip ..
Par ailleurs je n'ai pas compris le sens de la variable "%%j"
Je pense que les résultats intermédiaires sont écrits dans des fichiers temporaires sur disque, et non en RAM ?
As tu envisagé d'utiliser un disque en RAM ??
A+
Nyctaclope
Bon, c'est un peu loin pour moi, mais apparemment tout le fichier est parcouru, donc c'est lourd ..
Je ne sais s'il y a une limite pour Find, mais , uniquement par intuition, j'aurais fait deux étapes :
1// stoker les lignes trouvées par findstr dans un fichier tampon via ">>"
2// ensuite le ratisser par le For
j'ai l'impression que cela gagnerait du temps ? car les tests ne sont faits que sur les lignes intéressantes. Mais c'est à voir selon le contenu de ton fichier A.dat
Mais je n'ai peut être pas tout saisi de ta manip ..
Par ailleurs je n'ai pas compris le sens de la variable "%%j"
Je pense que les résultats intermédiaires sont écrits dans des fichiers temporaires sur disque, et non en RAM ?
As tu envisagé d'utiliser un disque en RAM ??
A+
Nyctaclope
JEC_noob
Messages postés
9
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
11 octobre 2012
11 oct. 2012 à 09:25
11 oct. 2012 à 09:25
La variable %%J est la ligne que je copie dans le nouveau fichier.
Mais comment cette variable est modifiée... J'en sais rien.
Et pour la RAM... Je ne vois pas comment faire.
Il semble que ça marche si je lui laisse du temps, ce matin la démarche était terminée.
Etant donné que les 200000 premières lignes ne changent pas, je vais seulement rajouter les dernières en préparant les fichiers de départ. ça devrait être plus rapide. mais ça m'oblige à dupliquer les fichiers à la main...
Mais comment cette variable est modifiée... J'en sais rien.
Et pour la RAM... Je ne vois pas comment faire.
Il semble que ça marche si je lui laisse du temps, ce matin la démarche était terminée.
Etant donné que les 200000 premières lignes ne changent pas, je vais seulement rajouter les dernières en préparant les fichiers de départ. ça devrait être plus rapide. mais ça m'oblige à dupliquer les fichiers à la main...
JEC_noob
Messages postés
9
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
11 octobre 2012
11 oct. 2012 à 09:53
11 oct. 2012 à 09:53
J'ai décomposé A.dat en A_A.dat et A_B.dat.
Je copie les 200000 lignes.
Puis j'écris la ligne à modifier.
Enfin je fais un echo par ligne du A_B.dat... (Pas très joli mais ça marche...)
en tout cas, merci Nyctaclope pour tes conseils!
Je copie les 200000 lignes.
Puis j'écris la ligne à modifier.
Enfin je fais un echo par ligne du A_B.dat... (Pas très joli mais ça marche...)
for %%B in (1) do ( copy A_A.dat B.dat echo blabla >> B.dat echo A_B1 >> B.dat .... echo A_B20 >> B.dat pause )
en tout cas, merci Nyctaclope pour tes conseils!
Nyctaclope
Messages postés
5315
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
11 décembre 2022
1 250
11 oct. 2012 à 14:08
11 oct. 2012 à 14:08
Re
Je reviens sur le mode de travail éventuel en RAM ...
Je ne connais pas la mécanique intime des commandes telles que find et for, mais il est possible que les résultats en cours soient écrits sur des fichiers temporaires, donc sur disque dur, plutôt qu'en RAM, et cela peut donc être relativement assez lent ..
Sans doute connais tu :
Autrefois, on pouvait, en appelant un gestionnaire ( ramdisk.sys ) dans le fichier de démarrage config.sys de DOS créer un disque virtuel en mémoire RAM ( disque formatable, "écrivable" et lisible exactement comme un disque normal, mais avec les vitesses importantes permises par la RAM ). Certains gestionnaires permettaient même de retrouver le contenu du disque après le redémarrage ..
L'inconvénient est de prélever pour cela une part de la RAM, mais les avantages sont intéressants pour travailler sur des fichiers demandant beaucoup d'écritures et lectures, comme des tris, ou ton traitement de fichiers ..
Cela n'existe plus, mais je me souviens avoir lu qu'il existait maintenant des utilitaires permettant de gérer un tel disque virtuel sous Windows. Je n'ai pas eu l'occasion d'en essayer ..
Cela pourrait être intéressant pour toi de faire l'essai, par exemple en limitant le prélèvement sur la RAM avec un disque virtuel seulement réservé aux fichiers tampons de travail ( ici A_B.dat et B.dat ? ). Si cela marche, tu pourrais gagner beaucoup de temps sur le traitement.
J'essaye de trouver des pistes sous Google ..
A bientôt
Nyctaclope
Je reviens sur le mode de travail éventuel en RAM ...
Je ne connais pas la mécanique intime des commandes telles que find et for, mais il est possible que les résultats en cours soient écrits sur des fichiers temporaires, donc sur disque dur, plutôt qu'en RAM, et cela peut donc être relativement assez lent ..
Sans doute connais tu :
Autrefois, on pouvait, en appelant un gestionnaire ( ramdisk.sys ) dans le fichier de démarrage config.sys de DOS créer un disque virtuel en mémoire RAM ( disque formatable, "écrivable" et lisible exactement comme un disque normal, mais avec les vitesses importantes permises par la RAM ). Certains gestionnaires permettaient même de retrouver le contenu du disque après le redémarrage ..
L'inconvénient est de prélever pour cela une part de la RAM, mais les avantages sont intéressants pour travailler sur des fichiers demandant beaucoup d'écritures et lectures, comme des tris, ou ton traitement de fichiers ..
Cela n'existe plus, mais je me souviens avoir lu qu'il existait maintenant des utilitaires permettant de gérer un tel disque virtuel sous Windows. Je n'ai pas eu l'occasion d'en essayer ..
Cela pourrait être intéressant pour toi de faire l'essai, par exemple en limitant le prélèvement sur la RAM avec un disque virtuel seulement réservé aux fichiers tampons de travail ( ici A_B.dat et B.dat ? ). Si cela marche, tu pourrais gagner beaucoup de temps sur le traitement.
J'essaye de trouver des pistes sous Google ..
A bientôt
Nyctaclope
JEC_noob
Messages postés
9
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
11 octobre 2012
11 oct. 2012 à 14:18
11 oct. 2012 à 14:18
Je te remercie mais le moyen que j'ai employé est vraiment rapide car il ne reste que quelques dizaines de lignes à écrire une par une. Le plus gros se fait avec la fonction "copy" qui est instantanée.
La modification du fichier A en entier se fait maintenant quasi instantanément.
Si la modification doit se faire au milieu du fichier alors il faut surement creuser dans ta direction car la mienne sera trop longue. Mais dans ce cas, la solution est satisfaisante.
Merci beaucoup pour l'aide! ;)
La modification du fichier A en entier se fait maintenant quasi instantanément.
Si la modification doit se faire au milieu du fichier alors il faut surement creuser dans ta direction car la mienne sera trop longue. Mais dans ce cas, la solution est satisfaisante.
Merci beaucoup pour l'aide! ;)
Nyctaclope
Messages postés
5315
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
11 décembre 2022
1 250
Modifié par Nyctaclope le 11/10/2012 à 14:44
Modifié par Nyctaclope le 11/10/2012 à 14:44
Re
Eh bien, parfait ..
Et ne me remercie pas, je n'ai pas fait grand chose ..
Bonne suite à toi ..
A+
Nyctaclope
PS : au cas où .. fiche sur le ramdisk sous Windows :
https://www.pcastuces.com/pratique/windows/ramdisk_disque_virtuel/page1.htm
Si tu es en 64bits, il faut faire une petite recherche sous Google ..
Eh bien, parfait ..
Et ne me remercie pas, je n'ai pas fait grand chose ..
Bonne suite à toi ..
A+
Nyctaclope
PS : au cas où .. fiche sur le ramdisk sous Windows :
https://www.pcastuces.com/pratique/windows/ramdisk_disque_virtuel/page1.htm
Si tu es en 64bits, il faut faire une petite recherche sous Google ..