[BAT] Suppr dans un .txt d'une chaine de caractére si le fichier existe pas [Fermé]

Signaler
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
-
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021
-
Bonjour tout le monde!

J'ai un probléme concernant un script bat. J'ai un programme fonctionnel qui me permet de renommer des fichiers PDF avec Nom_jj-mm-aaaa. Une fois que le fichiers est renommé je stock son nom dans un fichiers texte. Sauf que j'ai fait une condition pour évité les doublons. Il check dans le fichier BDD.txt si la chaine de caractére existe. Si un utilisateur supprime sans faire exprés le fichier, il reste en memoire dans le BDD.txt et ne peut plus etre renommé je voudrais donc supprimé si il existe plus dans perdre la mise en page du .txt merci d'avance!

voila le code:

@echo off

cd D:\Users\xxxxx\Desktop\Outils STAGE Informatique\partage
setlocal enabledelayedexpansion
for %%a in (*.pdf) do (
for /f "tokens=1 delims= " %%b in ('echo %%~ta') do (
set "$date=%%b"
set "$date=!$date:/=-!"

findstr /m %%~na "D:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\BDD.txt" && echo fichier deja renomme || (ren "%%a" "%%~na_!$date!.pdf" & echo %%~na_!$date!.pdf >> "D:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\BDD.txt")
)



voila le .txt (exemple)


test1_19-04-2018.pdf
test2_09-10-2017.pdf
test3_25-09-2018.pdf

3 réponses

Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021
4 483
Essaie comme ça :

@echo off

set script=%USERPROFILE%\Desktop\Outils STAGE Informatique\Script

cd %USERPROFILE%\Desktop\Outils STAGE Informatique\partage

setlocal enabledelayedexpansion

for /r %%a in (*.pdf *.jpg *.png) do (

for /f "tokens=1 delims= " %%b in ('echo %%~ta') do (

set "$date=%%b"
set "nouveaunom=%%~na_!$date:/=-!%%~xa"

findstr /C:"%%~na" "%script%\BDD.txt" >nul || (ren "%%~a" "!nouveaunom!" & echo.!nouveaunom! >>"%script%\BDD.txt")

)

)

for /f "usebackq delims=" %%A in ("%script%\BDD.txt") do if not exist "%%~A" (set "liste=!liste! %%~nA")

for /f "tokens=1,* delims=:" %%A in ('2^>nul findstr /V /N "!liste!" "%script%\BDD.txt"') do echo.%%B >>"%script%\BDD2.txt"

if exist "%script%\BDD2.txt" (type "%script%\BDD2.txt" >"%script%\BDD.txt" & del "%script%\BDD2.txt")

pause

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020

Sa fonctionne, j'aimerais aussi que sa le modifie dans les sous dossier du coup j'avais fait sa sa a marché au début en .pdf mais pas en .jpg.... Bizarre..

@echo off

set script=%USERPROFILE%\Desktop\Outils STAGE Informatique\Script

cd %USERPROFILE%\Desktop\Outils STAGE Informatique\partage

setlocal enabledelayedexpansion

for /f "delims=" %%a In ('dir /ad /b /s "C:\Users\%username%\Desktop\Outils STAGE Informatique\partage"') Do (
for /r %%a in (*.pdf *.jpg *.png) do (

for /f "tokens=1 delims= " %%b in ('echo %%~ta') do (

set "$date=%%b"
set "nouveaunom=%%~na_!$date:/=-!%%~xa"

findstr /C:"%%~na" "%script%\BDD.txt" >nul || (ren "%%~a" "!nouveaunom!" & echo.!nouveaunom! >>"%script%\BDD.txt")

)
 cd %%a
)
)

for /f "usebackq delims=" %%A in ("%script%\BDD.txt") do if not exist "%%~A" (set "liste=!liste! %%~nA")

for /f "tokens=1,* delims=:" %%A in ('2^>nul findstr /V /N "!liste!" "%script%\BDD.txt"') do echo.%%B >>"%script%\BDD2.txt"

if exist "%script%\BDD2.txt" (type "%script%\BDD2.txt" >"%script%\BDD.txt" & del "%script%\BDD2.txt")



Sa modifie les fichiers dans les sous répertoires mais sa modifie indéfiniment
>
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020

C’est normal que ça tourne indéfiniment, tu as une double récursivité, il faut supprimer la boucle avec dir /ad /b /s
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
> barnabe0057
J'ai supprimer la boucle le code donne le même problème:

@echo on
set script=%USERPROFILE%\Desktop\Outils STAGE Informatique\Script
cd %USERPROFILE%\Desktop\Outils STAGE Informatique\partage
setlocal enabledelayedexpansion
 for /r %%a in (*.pdf *.jpg *.png) do (
  for /f "tokens=1 delims= " %%b in ('echo %%~ta') do (
   set "$date=%%b"
     set "nouveaunom=%%~na_!$date:/=-!%%~xa"
   findstr /C:"%%~na" "%script%\BDD.txt" >nul || (ren "%%~a" "!nouveaunom!" & echo.!nouveaunom!>>"%script%\BDD.txt")
   )
   )
for /f "usebackq delims=" %%A in ("%script%\BDD.txt") do if not exist "%%~A" (set "liste=!liste! %%~nA")
 for /f "tokens=1,* delims=:" %%A in ('2^>nul findstr /V /N "!liste!" "%script%\BDD.txt"') do echo.%%B >>"%script%\BDD2.txt"
if exist "%script%\BDD2.txt" (type "%script%\BDD2.txt" >"%script%\BDD.txt" & del "%script%\BDD2.txt")
pause


J'ai compris pour quoi sa renomme deux fois, il ne m'écrit pas le nom du fichier renommé présent dans le sous dossier , en mettant le echo sur on il passe deux fois le fichier ... bizzare
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
> barnabe0057
Le fichier se nomme ex: test_20-10-2020_20-10-2020_20-10-2020 et n'ai pas écrit dans BDD.txt
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021
4 483 >
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020

Je ne peux pas t'aider davantage puisque je n'arrive pas à reproduire ton problème, chez moi tout fonctionne bien.
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021
4 483
Bonjour,

Tu ne peux pas directement supprimer une partie d'un fichier texte, il faut reconstruire le ficher texte en excluant cette partie, ce qui est plutôt simple à faire.

Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
>
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021

De se que je comprend je ne peut pas supprimer de ligne dans un fichier texte à partir d'un .bat? Mais si un utilisateur supprime un fichier dans le partage il pourra pas le renommer une deuxième fois car une fois le nom modif il est stocké dans le bdd. Txt alors je suis bloqué ????
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021
4 483 >
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020

Bloqué non, il faut simplement reconstruire un nouveau fichier texte à chaque fois.
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
>
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021

OK j'ai compris! il faudrait alors que je mettent en place la suite de script qui me permet de générer un nouveau fichier txt me ressortant uniquement les nom qui sont a la fois dans le dossier et dans le fichier txt et le fichier out on le détruit a chaque début de script!!
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
>
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021

Il faudrais alors mettre un

del /s résultat.txt

et ensuite

FOR %%A IN (FIND "%%~na" D:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\BDD.txt) DO (%%A >> D:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\résultat.txt)


Sa me génère un fichier résultat mais avec 3 doublons
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020
>
Messages postés
13616
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 juillet 2021

J'ai presque résolu le problème:


@echo off
del /s "C:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\resultat.txt"
cd C:\Users\xxxxx\Desktop\Outils STAGE Informatique\partage
setlocal enabledelayedexpansion
for %%a in (*.pdf) do (
for /f "tokens=1 delims= " %%b in ('echo %%~ta') do (
set "$date=%%b"
set "$date=!$date:/=-!"
findstr /m %%~na "C:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\BDD.txt" && echo %%~na >> "C:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\resultat.txt" || ( ren "%%a" "%%~na_!$date!.pdf" & echo %%~na_!$date!.pdf >> "C:\Users\xxxxx\Desktop\Outils STAGE Informatique\Script\BDD.txt"))
))


Quand je supprime un fichier dans partages son nom est également supprimer dans le fichier résultat .txt
Messages postés
17
Date d'inscription
jeudi 27 février 2020
Statut
Membre
Dernière intervention
4 mars 2020

Plus de boublon avec la solution précedante mais quand je supprime un fichier je ne peut plus le renommer....