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

Fermé
SAITO_ Messages postés 17 Date d'inscription jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020 - Modifié le 28 févr. 2020 à 14:29
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 4 mars 2020 à 19:33
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 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 921
3 mars 2020 à 21:35
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
Modifié le 4 mars 2020 à 08:30
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
4 mars 2020 à 12:50
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020 > barnabe0057
4 mars 2020 à 13:24
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020 > barnabe0057
4 mars 2020 à 14:08
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 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 921 > SAITO_ Messages postés 17 Date d'inscription jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
4 mars 2020 à 19:33
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 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 921
29 févr. 2020 à 08:11
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
29 févr. 2020 à 10:57
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 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 921 > SAITO_ Messages postés 17 Date d'inscription jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
29 févr. 2020 à 11:36
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020 > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
1 mars 2020 à 12:28
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 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 921 > SAITO_ Messages postés 17 Date d'inscription jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
2 mars 2020 à 05:42
Bloqué non, il faut simplement reconstruire un nouveau fichier texte à chaque fois.
0
SAITO_ Messages postés 17 Date d'inscription jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020 > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
2 mars 2020 à 08:56
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 jeudi 27 février 2020 Statut Membre Dernière intervention 4 mars 2020
2 mars 2020 à 12:37
Plus de boublon avec la solution précedante mais quand je supprime un fichier je ne peut plus le renommer....
0