% .bat

Résolu
Bonjour,

Lorsque je lance mon fichier .bat, les % disparaissent et cela plante donc alors que cela fonctionne en ligne de commande. Des idées ?

@echo off
FOR /F "eol=; tokens=4,5* " %i in ('DIR /O-D') do if %i==debut_fichier (GOTO end)
:end
@echo END
@echo %j
PAUSE


4 réponses

  1. Bonjour dubcek

    Merci encore pour le code que m'avais donné.

    Il m'a beaucoup aidé.

    J'avais besoin après de faire des manipulations sur le document original et le résultat.
    Il fallait les renommer et les déplacer dans des répertoire.

    Je mets le code au cas où çà pourrai aider quelqu’un

    :: copie le nouveau fichier resultat.csv dans le repertoire RESULT
    xcopy resultat.csv .\RESULT

    :: recuperation de la date du jour
    set mydate=%date:~6,4%_%date:~3,2%_%date:~0,2%

    :: je renomme le fichier en Article_Final_yyyy_mm_dd
    move resultat.csv Articles_Final_%mydate%.csv
    set Final=Articles_Final_%mydate%.csv

    :: je renomme le fichier en Articleoriginal_yyyy_mm_dd
    move Articles.csv Articles_Original_%mydate%.csv
    set Original=Articles_Original_%mydate%.csv

    :: deplace le repertoire Final dans HISTO
    move "%Final%" ".\HISTO\FINAL"

    :: deplace le repertoire Originaldans HISTO
    move "%Original%" ".\HISTO\ORIGINAL"
    1. Bonjour dubcek

      J'ai le même problème que DelNC

      J'ai essayer de mettre le code que tu as posté le 20 novembre mais je ne vois pas où je dois le mettre.
      Un coup de Main s'il te plaît

      Merci
      :)
      1. Contributeur
        le mettre où ? dans le code du 13 novembre ?
      2. Contributeur
        le mettre où ? dans le code du 13 novembre ?
      3. Contributeur
        le mettre où ? dans le code du 13 novembre ?
      4. Contributeur
        @echo off
        setlocal ENABLEDELAYEDEXPANSION
        set l=1
        for /F "delims=; tokens=1,2,*" %%a in (f1.txt) do (
        set c2=%%b
        if !l! NEQ 1 (
        for /F "delims=m tokens=2*" %%x in ('echo !c2!') do set c2=m%%x
        )
        echo %%a; !c2!; %%c
        set /a l+=1
        )
    2. Contributeur
      hello
      Je cherche à faire un code qui me permettrait d'effacer les n caractères qui se situent entre deux ; pour toutes les lignes d'un document csv
      montre un exemple
      1. Hello dubcek & superchinoy

        Pour un des utilisateurs de la base de données, quand ils nous envoie les données on à ceci
        id_article; magasin1; designation; famille; cout_unitaire
        131; 131 ~ magasin1; Lampe de poche; sport; 10
        132; 132 ~magasin1; gourde; sport; 10

        il faut que je retire la partie 131 ~ par exemple

        Pour ce client, c'est le problème inverse que la question à laquelle tu as répondu ce matin.
        https://forums.commentcamarche.net/forum/affich-32769191-insertion-d-un-champs-dans-un-document-csv#p32774529

        Çà ne fais que 2 jours que je code en batch et je commence à devenir folle.

        Merci pour l'aide que vous pourrez m'apportée.
      2. Contributeur
        on teste pour ne pas modifier la 1ère ligne
        C:> type f1.csv
        id_article; magasin1; designation; famille; cout_unitaire
        131; 131 ~ magasin1; Lampe de poche; sport; 10
        132; 132 ~magasin1; gourde; sport; 10
        C:> bb
        id_article; magasin1; designation; famille; cout_unitaire
        131; magasin1; Lampe de poche; sport; 10
        132; magasin1; gourde; sport; 10

        C:> type bb.bat
        @echo off
        setlocal ENABLEDELAYEDEXPANSION
        set l=1
        for /F "delims=; tokens=1,2,*" %%a in (f1.csv) do (
        set c2=%%b
        if !l! NEQ 1 (
        set c2=!c2:~6,20!
        )
        echo %%a; !c2!; %%c
        set /a l+=1
        )
      3. @DelNCBonjour

        Est ce que çà serait possible selon toi de pouvoir faire la même chose mais avec un nombre de caractères à supprimer variable.
        Sinon je devrais adapter le script selon le nombre de caractères à supprimer.

        C:> type f1.csv
        id_article; magasin1; designation; famille; cout_unitaire
        131;131 ~ magasin1; Lampe de poche; sport; 10
        132;132 ~magasin1; gourde; sport; 10
        .....
        1132;1132 ~magasin1; gourde; sport; 10
        11132;11132 ~magasin1; gourde; sport; 10

        C:> bb
        id_article; magasin1; designation; famille; cout_unitaire
        131;magasin1; Lampe de poche; sport; 10
        132;magasin1; gourde; sport; 10
        .....
        1132;magasin1; gourde; sport; 10
        11132;magasin1; gourde; sport; 10

        Je vais tester en mettant un while dans le for
      4. Contributeur
        quel critère pour savoir jusqu'ou supprimner ? le champ contient toujours magasin ?
    3. OK, c'est résolu, il faut mettre deux fois le % dans un bat...
      @echo off
      FOR /F "eol=; tokens=4,5* " %%i in ('DIR /O-D') do if %%i==debut_fichier (GOTO end)
      :end
      @echo END
      @echo %%j
      PAUSE
      1. Bonjour,

        Peux-tu expliquer, s'il te plaît à quoi sert ton code.
        Merci

        Je cherche à faire un code qui me permettrait d'effacer les n caractères qui se situent entre deux ; pour toutes les lignes d'un document csv