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

SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

3 réponses

barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
barnabe0057 > SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
C’est normal que ça tourne indéfiniment, tu as une double récursivité, il faut supprimer la boucle avec dir /ad /b /s
0
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > 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
0
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > barnabe0057
 
Le fichier se nomme ex: test_20-10-2020_20-10-2020_20-10-2020 et n'ai pas écrit dans BDD.txt
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne peux pas t'aider davantage puisque je n'arrive pas à reproduire ton problème, chez moi tout fonctionne bien.
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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.

0
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Il faut que je face un fichier txt qui me resort le résultat de la suppression ? Mais quand je check si la ligne est présente dans le fichier de recherche dans le quel ?
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Je vais essayer d'être plus précis : tu peux ajouter des informations à un fichier texte mais tu ne peux pas supprimer ou modifier des informations.

J'espère avoir bien compris ta demande.
0
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
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é ????
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Bloqué non, il faut simplement reconstruire un nouveau fichier texte à chaque fois.
0
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
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!!
0
SAITO_ Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Plus de boublon avec la solution précedante mais quand je supprime un fichier je ne peut plus le renommer....
0