Tom's Guide > Forum > Programmation > BATCH et la gestion de fichier - dossier .....

BATCH et la gestion de fichier - dossier .....

Forum Programmation : BATCH et la gestion de fichier - dossier .....

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonsoir à tous donc voila j'ai plusieurs question sur la manipulation des fichier, surtout les nom des fichier en batch.

1° Est il possible de vérifier le nom que porte mon fichir batch qui est entrain d' etre executé ??

2°Comment récupéré[b]UNIQUEMENT le nom de tout les fichiers situés dans un repertoir définit en connaissant seulement l'extension des fichiers.

3° Pour manipuler des fichier situé dans "Mes Documents" esqu'il faut obligatoirement passer par :
C:\Documents and Settings\user\Documents de User\ ???

4° Comment faire si on ne connait pas à l'avance le "User" ??

Voila c'était une compilation des meilleurs question de Dark Silver :-D
Si vous pouviez répondre à une ou plusieurs de ces questions ce serait sympas !!

Merci !

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

1. c'est le paramètre 0. Ex:
echo %0

2. dir /B *.txt

3 et 4 utiliser la variable d'environnement USERPROFILE
Rappel,: en tappant just set, on a la liqste des variable d'environnements et help set (à la fin) il y a les variables systèmes (comme %DIR%)
Pour "Mes documents" je n'ai rien vu, mais comme tu as le reste c'est bon ;-)

Répondre à CRicky

Merci beaucoup !!
Maintenant peut tu me dire comment trouver et éliminer une chaine de caractère dans un fichier. par exemple dans un fichier j'ai : 25/09/2001

Comment faire pour enlever les "/"

Répondre à Dark_Silver

Je ne sais pas comment découper en cherchant le / comme le fait la commande cut sous unix. Il y a peut-être quelque chose à faire avec find et findstr, mais je ne vois pas.

Sinon si tu connais les positions, tu peux découper facilement sur les positions:
si tu a une variable "a" qui contient 25/09/2001, tu peux récupérer le "25" comme ceci:
echo %a:~0,2%
le "09": echo %a:~3,2%
le "2001": echo %a:~6%

Le premier chiffre indiquant la position du caractère (commençant par 0 evidemment), le 2ème chiffre est le nombre de caractères à récupérer (s'il n'y est pas, ça prend jusqu'à la fin).
Ceci est expliqué dans "help set".

Répondre à CRicky

Slt et esque tu pourré me dire comment récupéré la première ligne d'un fichier dans une variables.

Et comment conter le nombre de lignes d'un fichier ??

J'ai cru comprendre qu'il faut utiliser la "boucle for" mais je ne sais ni à quoi elle sair exactement ni comment l'utiliser.

Quand j'ai tappé "for/?" dans dos sa m'a sortit un charabia que j'ai du mal à avalé !!

Répondre à Dark_Silver

FOR c'est pour faire une boucle.
Le for du batch permet de faire plusieurs types de boucles selon son utilisation (je t'avoue que je ne trouve pas cette instruction très claire).

Bon je viens de jeter un oeil, j'ai vu ça:
FOR /F "eol=; tokens=2,3* delims=, " %i in (monfich.txt) do @echo %i %j %k

Et ben c'est justement cequ'il te faut pour ta date en mettant:
FOR /F "tokens=1,2,3* delims=/ " %i in (monfich.txt) do @echo jour=%i mois=%j annee=%k

Il faut bien mettre entre parenthèse le fichier pour indique c'est un fichier et pas autre chose.
Ici le for boucle sur les ligne du fichier, découpe la ligne en 3 variables, le séparateur étant "/"

%i avant in c'est généralement ce qui boucle ("la valeur courante" ). Comme là c'est un truc bizarre et qu'il y a 3 parties, ça met dans i,j,k (en incrémentant la lettre).
mais bon ça marche :-D

Répondre à CRicky

Ok je vais essyare pour la date. Mais si non comment faire pour les questions précédement posé : récupéré la première ligne d'un fichier dans une variable et coment compter le nombre de ligne d'un fichier ... Esque au moin c'est possible ?

Moi aussi je t'avoueré que même avec tes explication cete boucle for reste aussi complexe mais j'ai déjà réussis à comprendre quel pouvait être son utilité !

Merci !

Répondre à Dark_Silver

Pour une première ligne, je ne sais pas trop, tu peux faire un truc pas propre :-D
Un for et une variable booléenne pour ne traiter que la première ligne.
Par exemple, set /A isFirtLineRead=0
à chaque boucle de for:
- si isFirtLineRead est égal à 0, tu fait ton traitement et tu isFirtLineRead à 1
- sinon tu ne fait rien.

Bon ça fait des boucles pour rien, mais je vois pas mieux.

Pour compter le nombre de lignes, une même boucle for en incrémentant une variable à chaque fois devrait marcher.

Répondre à CRicky

Désolé mais je ne voi pas du tout ce que tui veu dire : pour la variable OK pas de pb je voi mais j'ai toujours pas compris comment tu récupère la première ligne ??

"isFirtLineRead" c'est une fonction spécial ou juste un nom que ta choisi ?? :-?

Répondre à Dark_Silver

Pour la variable, c'est juste un nom que j'ai choisi, désolé pour l'anglais ;-)

Pour le première ligne, en fait, tu les récupèrent toutes, mais tu fais ce que tu as à faire uniquement sur la première.
En fait, la variable permet de savoir si dans ta boucle tu es sur la première ligne ou une autre.
Une boucle faite par un FOR %i IN (fichier.txt) DO action
quand la variable est à 0, ça signifie que la 1ère ligne n'a pas encore été lue. Quand elle est à 1, ça signifie que tu as déjà lu la première ligne et donc, que tu es sur une ligne suivante.
Donc tu passes la variable de 0 à 1 pour dire que tu as fini de lire la première ligne.

Répondre à CRicky

Ah Ok ! C'est vrai que comme tu di c'est un travail "pas propre" :).

Enfaite moi je voulais que dans 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. (Tu vois ce que je veu dire ?)

Donc si il existe une solution plus . . . . (propre) :)

Toujours plus de question :-D

Bon alors esqu'il est possiblde faire quelque chose du genre :

echo <123.txt >321.txt ??

set /P contenue=<123.txt
echo %contenue%>321.txt
" sa écris dans un fichier san 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 ?

Merci.

Répondre à Dark_Silver

dsl mais 1 up car cricky est revenu :-D

:plus1:

Répondre à Dark_Silver

en fait echo avec < ne marche pas.
Il faut utiliser la commande TYPE qui affiche le contenu d'un fichier.
type 123.txt > 321.txt

Tiens j'avais fait il y a un moment, un script qui permet de relier des fichiers qui ont été coupé en plusisuers morceaux (les paramètres étant les fichiers à recoller):

Code :
  1. @echo off
  2. set nb=0
  3. echo R‚pertoire courant: %CD%
  4. set /P JOINFILE=Entrez le nom du fichier:
  5. if exist %JOINFILE% (
  6. echo Fichier pr‚c‚dent d‚tect‚
  7. )
  8. :join
  9. if "%1"=="" goto end
  10. echo Lecture fichier %1...
  11. type %1 >> %JOINFILE%
  12. shift
  13. set /a nb+=1 > NUL
  14. goto join
  15. :end
  16. if %nb% EQU 0 (
  17. echo Usage: join file1 [file2 [file3 [...]]]
  18. ) else (
  19. echo -------------------------------------
  20. echo  Fichiers recoll‚s dans '%JOINFILE%'
  21. echo -------------------------------------
  22. )
  23. pause



Je rpends tus les fichiers des paramètres que je lie dans le ficheir %JOINFILE% avec >> qui écrit à la fin du fichier.
Le simple > efface et réécrit le fichier.
Dans ce script j'ai utilise la commande SHIFT pour décaler les paramètres (le %2 devient %1, %3 devient %2 etc), comme ça je boucle sur tous les paramètres sans connaitre le nombre.

Par contre j'ai toujours pas réussi à découper un fichier (faire l'opération inverse) :-D
Il faudrait couper le flux ou le limiter à une taille, mais je ne vois pas comment en batch.

EDIT:
Pour ajouter f1.txt au début de f.txt
il suffit de faire:

Code :
  1. type f1.txt > temp.txt
  2. type f.txt >> temp.txt
  3. type temp.txt > f.txt

Répondre à CRicky
Tom's Guide > Forum > Programmation > BATCH et la gestion de fichier - dossier .....
Aller à :

Il y a 260 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens