batch gestion de fichier ......
Dernière réponse : dans Programmation
Bonsoir à tous bon voila mon ou plustot MES problèmes :
question n°1 : Comment récupéré la première ligne d'un fichier dans une variables.
question n°2 : Comment conter le nombre de lignes d'un fichier ??
question n°3 : Comment avec une liste de nom créer à l'avance mon fichier batch copie un fichier mais avec les différents nom qui se trouvent dans la liste. (Vous voyez ce que je veu dire ?)
question n°4 : Bon alors esqu'il est possible de faire quelque chose du genre :
echo <123.txt >321.txt ??
Sachant que cet exemple ne marche pas ! J'ai essayer aussi de récupérer le contenue du fichier dans une variable :
set /P contenue=<123.txt
echo %contenue%>321.txt
Mais sa non plus n' a pas marché.
Et quand on utilise la fonction ">>" sa écris dans un fichier sans modifié le contenue qu'il y avait avant mais est il possible au lieu que sa rajoute à la suite sa rajoute au début du fichier ?
Je pense que ces questions il n y a pas que moi qui me les poses, si quelqu'un pouvait m'aider please .... sa va faire peut être 2 semaines que je cherches sans rien trouver
Merci !
question n°1 : Comment récupéré la première ligne d'un fichier dans une variables.
question n°2 : Comment conter le nombre de lignes d'un fichier ??
question n°3 : Comment avec une liste de nom créer à l'avance mon fichier batch copie un fichier mais avec les différents nom qui se trouvent dans la liste. (Vous voyez ce que je veu dire ?)
question n°4 : Bon alors esqu'il est possible de faire quelque chose du genre :
echo <123.txt >321.txt ??
Sachant que cet exemple ne marche pas ! J'ai essayer aussi de récupérer le contenue du fichier dans une variable :
set /P contenue=<123.txt
echo %contenue%>321.txt
Mais sa non plus n' a pas marché.
Et quand on utilise la fonction ">>" sa écris dans un fichier sans modifié le contenue qu'il y avait avant mais est il possible au lieu que sa rajoute à la suite sa rajoute au début du fichier ?
Je pense que ces questions il n y a pas que moi qui me les poses, si quelqu'un pouvait m'aider please .... sa va faire peut être 2 semaines que je cherches sans rien trouver
Merci !
Autres pages sur : batch gestion fichier
Lassé par la pub ? Créez un compte
Disclamer: mes solutions sont peut-être barbare mais de toute facon c'est l'ésprit du batch, du moins celui qui tourne sous ms-dos, w9x et au dessus
réponse simple : avoir un fichier contenant 'nomdubatch --unargumentquel'ontesteracarilestimportant, faire une concaténation binaire de ce fichier et du fichier que tu veux et lancer cet autre fichier comme un batch :
trouver un executable unix pour windows qui s'appelle ''wc'' et lire son manuel, c'est le seul moyen potable
la encore une solution barbare que je ne detaille pas trop car je sait que ça se fait mieux dans certains windows recent, mais basiquement le truc est que quand on éxecute des commandes du type copy /b fichier.txt con /b la dernière ligne contient par exemple :
''ceci est la derniere ligne du fichier1 fichier(s) copié(s) avec succès''
on peut ensuite faire un find sur ''1 fichier(s) copié(s) avec succès'', lire cette chaine, faire un find -v sur ''1 fichier(s) copié(s) avec succès'' et recommencer jusqu'a que le fichier soit vide
echo <123.txt >321.txt ??déjà je comprend pas ce que tu veut faire, basiquement ''commande < fichier.txt'' envoie le contenu de fichier.txt sur l'entrée standart, c'est à dire que ça va faire comme si l'utilisateur tapait le contenu du fichier au clavier
echo n'attend rien au clavier, donc il ignore le contenu de 123.txt
pour afficher le contenu d'un fichier on peut utiliser type fichier.txtsimple :
Citation :
question n°1 : Comment récupéré la première ligne d'un fichier dans une variables.réponse simple : avoir un fichier contenant 'nomdubatch --unargumentquel'ontesteracarilestimportant, faire une concaténation binaire de ce fichier et du fichier que tu veux et lancer cet autre fichier comme un batch :
@echo off
if "%1"=="--unargumentquel'ontesteacarilestimportant" goto suite
:: un programme ...
:: recuperation de la premiere ligne du fichier
copy /b entete.txt+fichier.txt getligne.bat /b
:: remarquez que je n'utilise surtout pas call
getligne.bat
:suite
shift
::la ligne que l'on veut est dans les paramettres, ou bien on l'utilise, ou bien euh ...
:getparam
set arg=%arg%%1 >nul
shift
if not "%1"=="" goto getparam
:: la les paramettres sont dans arg, mais on pert pas mal quand même ...
Citation :
question n°2 : Comment conter le nombre de lignes d'un fichier ??Citation :
question n°3 : Comment avec une liste de nom créer à l'avance mon fichier batch copie un fichier mais avec les différents nom qui se trouvent dans la liste. (Vous voyez ce que je veu dire ?)la encore une solution barbare que je ne detaille pas trop car je sait que ça se fait mieux dans certains windows recent, mais basiquement le truc est que quand on éxecute des commandes du type copy /b fichier.txt con /b la dernière ligne contient par exemple :
''ceci est la derniere ligne du fichier1 fichier(s) copié(s) avec succès''
on peut ensuite faire un find sur ''1 fichier(s) copié(s) avec succès'', lire cette chaine, faire un find -v sur ''1 fichier(s) copié(s) avec succès'' et recommencer jusqu'a que le fichier soit vide
Citation :
question n°4 : Bon alors esqu'il est possible de faire quelque chose du genre :echo <123.txt >321.txt ??
echo n'attend rien au clavier, donc il ignore le contenu de 123.txt
pour afficher le contenu d'un fichier on peut utiliser type fichier.txt
Citation :
Et quand on utilise la fonction ">>" sa écris dans un fichier sans modifié le contenue qu'il y avait avant mais est il possible au lieu que sa rajoute à la suite sa rajoute au début du fichier ?
commande > "fichiertemporaire.txt"
copy /a "fichiertemporaire.txt"+"123.txt" "fichierfinal.txt"
:: et si on veut :
copy "fichierfinal.txt" "123.txt"
Le MS-DOS manque cruellement de telles fonctions tout en donnant une fausse impression de facilités. D'où ce genre de post.
Habitué à plus de confort sur d'autres systèmes, j'installe systématiquement CygWIN www.cygwin.com sur les postes avec lesquels je dois bosser.
Si tu n'as pas la possibilité ou la volonté d'installer CygWIN, tu peux toujours voir du côté de UnxUtils http://unxutils.sourceforge.net. Tu y trouveras entre autres wc évoqué par Batchy.
Enjoy!
Habitué à plus de confort sur d'autres systèmes, j'installe systématiquement CygWIN www.cygwin.com sur les postes avec lesquels je dois bosser.
Si tu n'as pas la possibilité ou la volonté d'installer CygWIN, tu peux toujours voir du côté de UnxUtils http://unxutils.sourceforge.net. Tu y trouveras entre autres wc évoqué par Batchy.
Enjoy!
C'est vrai que moi j'utilise le batch car comme tu dis c'est facile et je trouve qu'on perd beaucoup moin son temps !! aulieu de faire une page de code en C++ pour copier un fichier on fé juste :
copy fichier1 destination
C'est pour sa que j'ai choisi le batch !! Mais si tu connais un langage plus puissant que tu me conseillerais . . . .
Merci
copy fichier1 destination
C'est pour sa que j'ai choisi le batch !! Mais si tu connais un langage plus puissant que tu me conseillerais . . . .
Merci
Batch c'est très bien pour ce que tu as à faire.
Mais il manque des tas de fonctions au DOS.
unxutils apporte les fonctions UNXI classiques.
C'est 99.9% des besoins.
Mais s'il t'en manque encore, tu peux toujours programmer un filtre en C. Voici un canevas de fonction qui fait RIEN :
En revanche, CygWIN c'est un environnement de type UNIX complet !
Enjoy!
Mais il manque des tas de fonctions au DOS.
unxutils apporte les fonctions UNXI classiques.
C'est 99.9% des besoins.
Mais s'il t'en manque encore, tu peux toujours programmer un filtre en C. Voici un canevas de fonction qui fait RIEN :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BUFSIZE 4097
int main ( int argc, char * argv [ ] )
{
char buf [ BUFSIZE ];
if ( argc == 2 && ! strcmp ( argv [ 1 ], "--version" ) )
{
fprintf ( stderr, "NOM_DE_LA_FONCTION - (copyleft)ton_nom_ici 2005\n" );
return 1;
}
if ( argc == 2 && ! strcmp ( argv [ 1 ], "--help" ) )
{
fprintf ( stderr, "Usage: NOM_DE_LA_FONCTION [options] [file_ref] \n" );
return 1;
}
/* Traitement des paramètres, .. ou pas */
while ( fgets ( buf, BUFSIZE - 1, stdin ) ) /* stdin ou autre, selon les paramètres */
{
/* traitement direct sur le buf, .. ou pas */
printf ( "%s", buf );
}
return 0;
}
En revanche, CygWIN c'est un environnement de type UNIX complet !
Enjoy!
Zeb dsl mais je comprend pas du tout ce que tu vien de me dire !!
batchy : je comprend pas ton script pour récuperer la 1er ligne .... :|
je comprend pas trop la partie ou tu fé intervenir un second fichier batch .... et je vois que tu utilise une commande "shift" à la ligne n° 16 mais à quoi set cette commande ?
batchy : je comprend pas ton script pour récuperer la 1er ligne .... :|
je comprend pas trop la partie ou tu fé intervenir un second fichier batch .... et je vois que tu utilise une commande "shift" à la ligne n° 16 mais à quoi set cette commande ?
Moi je suis sous XP fam. Et voila ce que m'affiche le "shift/?"
Shift change la position de paramètres remplaçables dans un programme de commandes.
SHIFT [/n]
Si les extensions de commandes sont activées, la commande SHIFT prend en charge le commutateur entre 0 et 8. Par exemple :
SHIFT /2
décalerait %3 en %2, 4% en %3, etc. et laisserait %0 et %1 intacts.
Bon je sais pas pour vous mais pour moi tout sa sa ne veu tout simplement rien dire .....
Shift change la position de paramètres remplaçables dans un programme de commandes.
SHIFT [/n]
Si les extensions de commandes sont activées, la commande SHIFT prend en charge le commutateur entre 0 et 8. Par exemple :
SHIFT /2
décalerait %3 en %2, 4% en %3, etc. et laisserait %0 et %1 intacts.
Bon je sais pas pour vous mais pour moi tout sa sa ne veu tout simplement rien dire .....
bon pour faire simple, soit un batch nommé script1.bat, appelé de la façon suivante :
dans %0 tu as batch1, dans %1, arg1, dans %2 arg2, et dans %3, arg.
Si ton batch doit vérifier la ligne de commande, tu vas sans doute vouloir vérifier la valeur de %1, %2, %3, etc. et %0 on s'en fiche (sauf pour afficher un message d'erreur ou d'usage approprié).
Dans ce cas, comme on se fiche de %0, on vérifie d'abord %1, puis on fait un "shift /1". Dans ce cas, on a :
%0 = batch1, %1 = arg2, %2 = arg3, %3 non défini.
on fait de même pour le traitement de arg2 et arg3. Dans tout le fichier de commandes, %0 reste inchangé et vaut le nom du fichier de commandes
exemple de batch pour montrer l'intérêt :
Edit : zut, alors que je faisais mon batch, KangOl a expliqué
batch1 arg1 arg2 arg3
dans %0 tu as batch1, dans %1, arg1, dans %2 arg2, et dans %3, arg.
Si ton batch doit vérifier la ligne de commande, tu vas sans doute vouloir vérifier la valeur de %1, %2, %3, etc. et %0 on s'en fiche (sauf pour afficher un message d'erreur ou d'usage approprié).
Dans ce cas, comme on se fiche de %0, on vérifie d'abord %1, puis on fait un "shift /1". Dans ce cas, on a :
%0 = batch1, %1 = arg2, %2 = arg3, %3 non défini.
on fait de même pour le traitement de arg2 et arg3. Dans tout le fichier de commandes, %0 reste inchangé et vaut le nom du fichier de commandes
exemple de batch pour montrer l'intérêt :
@echo off
if %1x == x (
echo %0 pas d'argument
goto end
) else (
echo %0 arg1 = %1
)
shift /1
if %1x == x (
echo %0 1 seul argument
goto end
) else (
echo %0 arg2 = %1
)
shift /1
if %1x == x (
echo %0 2 arguments
goto end
) else (
echo %0 arg3 = %1
)
shift /1
if %1x == x (
echo %0 3 arguments
) else (
echo %0 plus de 3 arguments
)
:end
Edit : zut, alors que je faisais mon batch, KangOl a expliqué
Citation :
c'est pourtant tres clair
ça ça l'est encore plus :
Citation :
------------------------- MS-DOS v6.22 Help: Shift -------------------------<Notes> <Examples> <Index>
----------------------------------------------------------------------------
SHIFT
Changes the position of replaceable parameters in a batch program.
Syntax
SHIFT
***
<Syntax> <Examples>
----------------------------------------------------------------------------
SHIFT--Notes
How the SHIFT command works
The SHIFT command changes the values of the replaceable parameters %0
through %9 by copying each parameter into the previous one. In other words,
the value of %1 is copied to %0, the value of %2 is copied to %1, and so on.
This is useful for writing a batch file that performs the same operation on
any number of parameters.
Working with more than 10 command-line parameters
You can also use the SHIFT command to create a batch file that can accept
more than 10 parameters. If you specify more than 10 parameters on the
command line, those that appear after the tenth (%9) will be shifted one at
a time into %9.
Shifting parameters back
There is no backward SHIFT command. Once you carry out the SHIFT command,
you cannot recover the first parameter (%0) that existed before the shift.
***
<Syntax> <Notes>
----------------------------------------------------------------------------
SHIFT--Example
The following batch file, MYCOPY.BAT, shows how to use the SHIFT command
with any number of parameters. It copies a list of files to a specific
directory. The parameters are the directory name followed by any number of
filenames.
@echo off
rem MYCOPY.BAT copies any number of files
rem to a directory.
rem The command uses the following syntax:
rem mycopy dir file1 file2 ...
set todir=%1
:getfile
shift
if "%1"=="" goto end
copy %1 %todir%
goto getfile
:end
set todir=
echo All done
***
----------------------------------------------------------------------------
sanglier08 a dit :
tout à fait, mais faut avoir envie de faire des batch qui prennent plus de 9 paramètres !!
dans mon exemple j'ai tout simplement mit la première ligne du fichier en paramettre, donc forcement j'ai besoin de recuperer toute la ligne, pas seulement les 9 premier mots...
batchy tu m'a di que pour récupeerer la première ligne d'un fichier dans uen variable il fallait faire : je cite
Mais es tu sur d'avoir bien compris pas question ?? je veu juste que la 1er ligne d'un fichier la plus part du temp ce sera un fichier texte et bien je la copie dans un autre fichier ou si non je la met dans une variable.
Exemple : mon fichier1.txt dedans il y a ceci :
- Bonjour toi. Comment sa va ?
- Sa va très bien merci.
- Quesque ta fais ce week end etc ......
Donc mon bute est : récupéré la première ligne de mon fichier en locurence ici ce sera "- Bonjour toi. Comment sa va?". Donc cette première ligne, ou je la stock dans un fichier .... ou je la stock dans une variable (je préféreré dans une variable) de façon ce que :
%a%==Bonjours toi. Comment sa va ?
Tu vois ce que je veu dire ?
Merci.
Citation :
avoir un fichier contenant 'nomdubatch --unargumentquel'ontesteracarilestimportant, faire une concaténation binaire de ce fichier et du fichier que tu veux et lancer cet autre fichier comme un batchMais es tu sur d'avoir bien compris pas question ?? je veu juste que la 1er ligne d'un fichier la plus part du temp ce sera un fichier texte et bien je la copie dans un autre fichier ou si non je la met dans une variable.
Exemple : mon fichier1.txt dedans il y a ceci :
- Bonjour toi. Comment sa va ?
- Sa va très bien merci.
- Quesque ta fais ce week end etc ......
Donc mon bute est : récupéré la première ligne de mon fichier en locurence ici ce sera "- Bonjour toi. Comment sa va?". Donc cette première ligne, ou je la stock dans un fichier .... ou je la stock dans une variable (je préféreré dans une variable) de façon ce que :
%a%==Bonjours toi. Comment sa va ?
Tu vois ce que je veu dire ?
Merci.
Citation :
batchy tu m'a di que pour récupeerer la première ligne d'un fichier dans uen variable il fallait faire : je cite Citation :
avoir un fichier contenant 'nomdubatch --unargumentquel'ontesteracarilestimportant, faire une concaténation binaire de ce fichier et du fichier que tu veux et lancer cet autre fichier comme un batchMais es tu sur d'avoir bien compris pas question ??
en gros il faut un fichier qui contient "nomdubatch --unargumentquel'ontesteacarilestimportant '' (je l'appelle entete.txt)
une fois concaténé binairement a ton fichier on aura un fichier du type :
donc si le nom de notre fichier batch s'appelle "firsline.bat'', on à :
nomdubatch --unargumentquel'ontesteacarilestimportant - Bonjour toi. Comment sa va ?
- Sa va très bien merci.
- Quesque ta fais ce week end etc ......
firsline.bat --unargumentquel'ontesteacarilestimportant - Bonjour toi. Comment sa va ?
- Sa va très bien merci.
- Quesque ta fais ce week end etc ......
ensuite on execute ce fichier comme si c'était lui même un fichier bat
lorsqu'on utilise pas call pour appeler un autre fichier batch, lorsque l'autre batch aura fini ça reviendra pas au précédent
donc en gros les actions éxécutées seront :
copy /b entete.txt+fichier.txt temp.bat (on concatène la chaine ''firsline.bat --unargumentblablabla")
temp.bat
qui lui execute :
firsline.bat --unargumentquel'ontesteacarilestimportant - Bonjour toi. Comment sa va ?
au debut de firsline.bat, on à la ligne :
if "%1"=="--unargumentquel'ontesteacarilestimportant" goto suite
donc après l'étiquette
on à la premiere ligne du fichier en parametre (par exemple %1="-" %2="Bonjour" %3="toi." ect ...), comme il faut ça dans une variable, alors on lance une petite boucle pour tout mettre dans une chaine
:suite
:getparam
set arg=%arg%%1 >nul
shift
if not "%1"=="" goto getparam
donc en gros on rajoute chaque argument tour a tour avec un espace pour reconstituer ''- Bonjour toi. Comment ça va ?'', qui se trouve dans la variable %arg%
Oui Je Sais, c'est moche comme solution, mais de toute facon c'est la philosophie du batch que de bidouiller avec du rien...
méthode plus simple pour extraire la première ligne d'un fichier texte :
C:\temp>type data.txt
- Bonjour toi. Comment sa va ?
- Sa va trÞs bien merci.
- Quesque ta fais ce week end
C:\temp>type essai.bat
@echo off
for /f "tokens=*" %%i in ('type %1') do (
echo %%i
goto end
)
:end
C:\temp>essai.bat data.txt
- Bonjour toi. Comment sa va ?
C:\temp>
olala je comprend rien c'est horrible. Bon batchy ce qui est bien c'est que tu sors de ces truc et tu pense que je vais comprendre !! Dès la première phrase je suis largué !! dsl
pour damocles j'arrive à suivre seulement jusqu'a la ligne "16".
Ce que je ne comprend pas c'est :
1° à la ligne 16 quesqu'il fait ?? il appelle 2 fichier différent en meme temps ??
2° D'après ce que j'ai compris cette 1er ligne n'est stocké nul part ! aucune variable ... aucune redirection vers un fichier txt ??
Merci à tous et désolé de ne pas trop comprendre ce que vous dites ....
pour damocles j'arrive à suivre seulement jusqu'a la ligne "16".
Ce que je ne comprend pas c'est :
1° à la ligne 16 quesqu'il fait ?? il appelle 2 fichier différent en meme temps ??
2° D'après ce que j'ai compris cette 1er ligne n'est stocké nul part ! aucune variable ... aucune redirection vers un fichier txt ??
Merci à tous et désolé de ne pas trop comprendre ce que vous dites ....
en fait, il faut lire comme ça (désolé, je me rends compte que le post n'est pas clair)
- mon fichier de test : data.txt, il contient :
- mon fichier de commandes, nommé 'essai.bat', pour extraire la 1ere ligne :
- un petit test : pour vérifier que ça marche :
à la ligne 16 (de mon message précédent), j'appelle mon fichier de commandes en lui passant en paramètre mon fichier de données.
la première ligne du fichier n'est pas stockée en effet. mais rien n'empêche de le faire... moi j'ai seulement fait un 'echo' de la ligne.
Pour la redirection, c'est pareil. Ce n'est pas fait, mais ce n'est pas bien difficile
- mon fichier de test : data.txt, il contient :
- Bonjour toi. Comment sa va ?
- Sa va trÞs bien merci.
- Quesque ta fais ce week end
- mon fichier de commandes, nommé 'essai.bat', pour extraire la 1ere ligne :
@echo off
for /f "tokens=*" %%i in ('type %1') do (
echo %%i
goto end
)
:end
- un petit test : pour vérifier que ça marche :
C:\temp>essai.bat data.txt
- Bonjour toi. Comment sa va ?
à la ligne 16 (de mon message précédent), j'appelle mon fichier de commandes en lui passant en paramètre mon fichier de données.
la première ligne du fichier n'est pas stockée en effet. mais rien n'empêche de le faire... moi j'ai seulement fait un 'echo' de la ligne.
Pour la redirection, c'est pareil. Ce n'est pas fait, mais ce n'est pas bien difficile
Bon le post date un peu, mais je vais quand meme apporter une réponse.
En reprenant le code de damocles, voilà comment récupérer dans une variable la 1ere ligne de ton fichier :
En admettant que ton fichier s'appelle fichier.txt
le contenu est donc stocké dans la variable v
j'ai rajouté un echo apres une pause afin d'afficher le résultat (contenu de la variable v), mais c'est juste un test.
En reprenant le code de damocles, voilà comment récupérer dans une variable la 1ere ligne de ton fichier :
En admettant que ton fichier s'appelle fichier.txt
@echo off
cls
for /f "tokens=*" %%i in ('type "fichier.txt"') do (
set v=%%i
goto end
)
:end
pause
echo %v%
pause
le contenu est donc stocké dans la variable v
j'ai rajouté un echo apres une pause afin d'afficher le résultat (contenu de la variable v), mais c'est juste un test.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumQu'est ce qu'un fichier batch
- ForumGestion de fichier dans windows 98
- ForumGestion fichier xml en php
- ForumCompteur de fichier en batch
- ForumPhp et fichier batch
- ForumComparaison fichier batch
- ForumEffacer un fichier en batch
- ForumCopie de fichier batch
- ForumRecherchesuppression fichier batch
- ForumTelecharger un fichier depuis batch
- Voir plus
( + AIX