Comparer contenus de dossier, et modifier nom de fichiers
Résolu/Fermé
A voir également:
- Comparer contenus de dossier, et modifier nom de fichiers
- Modifier liste déroulante excel - Guide
- Modifier dns - Guide
- Dossier appdata - Guide
- Vous avez besoin d'une autorisation de la part de administrateurs pour modifier ce dossier - Guide
- Nom de l'adresse - Forum Réseaux sociaux
6 réponses
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
Modifié le 27 mars 2017 à 13:58
Modifié le 27 mars 2017 à 13:58
Slt
@echo off
set dossier1=%USERPROFILE%\Tests1
set dossier2=%USERPROFILE%\Tests2
if not exist "%dossier1%" goto :eof
if not exist "%dossier2%" goto :eof
set liste1=%USERPROFILE%\efface.txt
set liste2=%USERPROFILE%\renomme.txt
if exist "%liste1%" (del "%liste1%")
if exist "%liste2%" (del "%liste2%")
for /f "tokens=*" %%A in ('dir /b /a-d "%dossier1%\*.*"') do (
for /f "tokens=*" %%B in ('dir /b /a-d "%dossier2%\*.*"') do (
if /i "%%~nxA"=="%%~nxB" (echo N | comp "%dossier1%\%%~nxA" "%dossier2%\%%~nxB" | findstr /C:"OK" && echo %%~nxA >> %liste1%)
if /i "%%~nxA"=="%%~nxB" (echo N | comp "%dossier1%\%%~nxA" "%dossier2%\%%~nxB" | findstr /C:"OK" || echo %%~nxB >> %liste2%)
)
)
cls
if not exist "%USERPROFILE%\efface.txt" goto suite
cd %dossier1%
for /f "tokens=*" %%C in (%liste1%) do (del "%%C" && echo Suppression de : %dossier1%\%%C)
:suite
if not exist "%USERPROFILE%\renomme.txt" goto fin
cd %dossier2% & echo.
for /f "tokens=*" %%D in (%liste2%) do (ren "%%D" "%%~nD_%date:~6,4%%date:~3,2%%date:~0,2%%%~xD" && echo Renommage de : %dossier2%\%%D)
:fin
echo. & pause
exit
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
Modifié le 27 mars 2017 à 20:05
Modifié le 27 mars 2017 à 20:05
Voilà le script avec la suite :
J'ai également intégré tes modifications, j'espère que ça te convient.
@echo off
set dossier1=%USERPROFILE%\Desktop\script\temp
set dossier2=%USERPROFILE%\Desktop\script\dossierfinal
set dossier3=%USERPROFILE%\Desktop\script\Old
if exist "%dossier1%" rmdir /S /Q "%dossier1%"
if not exist "%dossier1%" mkdir "%dossier1%"
if not exist "%dossier2%" mkdir "%dossier2%"
if not exist "%dossier3%" mkdir "%dossier3%"
For /f "tokens=*" %%a In ('dir /s /b /a-d "%USERPROFILE%\Desktop\script\source\*_IT.docx"') Do (Xcopy "%%a" "%dossier1%")
set liste1=%USERPROFILE%\efface.txt
set liste2=%USERPROFILE%\renomme.txt
if exist "%liste1%" (del /F "%liste1%")
if exist "%liste2%" (del /F "%liste2%")
for /f "tokens=*" %%A in ('dir /b /a-d "%dossier1%\*.*"') do (
for /f "tokens=*" %%B in ('dir /b /a-d "%dossier2%\*.*"') do (
for /f "tokens=1,2,3,* delims=/ " %%E in ('dir "%dossier2%\%%~nxB" ^| findstr /V "volume pertoire octets"') do (
if not exist "%dossier1%\%%~nxB" (copy /V /Y "%dossier2%\%%~nxB" "%dossier3%\%%~nB_%%G-%%F-%%E%%~xB" > nul && echo Copie de : %dossier2%\%%~nxB)
)
if /i "%%~nxA"=="%%~nxB" (echo. & echo N | comp "%dossier1%\%%~nxA" "%dossier2%\%%~nxB" | findstr /C:"OK" && echo %%~nxA >> %liste1%)
if /i "%%~nxA"=="%%~nxB" (echo. & echo N | comp "%dossier1%\%%~nxA" "%dossier2%\%%~nxB" | findstr /C:"OK" || echo %%~nxB >> %liste2%)
)
)
cls
if not exist "%liste1%" goto suite
cd %dossier1%
for /f "tokens=*" %%C in (%liste1%) do (del /F "%%C" && echo Suppression de : %dossier1%\%%C)
:suite
if not exist "%liste2%" goto fin
cd %dossier2% & echo.
for /f "tokens=*" %%D in (%liste2%) do (ren "%%D" "%%~nD_%date:~6,4%-%date:~3,2%-%date:~0,2%%%~xD" && echo Renommage de : %dossier2%\%%D)
:fin
For /f "tokens=*" %%a In ('dir /s /b /a-d "%dossier1%\*.docx"') Do (Xcopy "%%a" "%dossier2%")
echo. & pause
del /F "%liste1%"
del /F "%liste2%"
exit
J'ai également intégré tes modifications, j'espère que ça te convient.
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
>
nicolas.74
28 mars 2017 à 09:14
28 mars 2017 à 09:14
Tu as peut-être mal copié-collé, ou bien tu as enlevé ou rajouté un espace quelque part, ou tu as oublié un ".
Pas le temps ce matin, je re-vérifierai le script cet après-midi.
Pas le temps ce matin, je re-vérifierai le script cet après-midi.
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
>
nicolas.74
Modifié le 28 mars 2017 à 10:52
Modifié le 28 mars 2017 à 10:52
Dans la nouvelle étape la commande copy renomme les fichiers en même temps qu'elle les copie, je suis sûr de cette partie que j'ai testé et re-testé hier.
Les seules choses que je n'ai pas testé c'est tes modifications, les 2 boucles FOR, que j'ai intégré au début et à la fin du script, sinon le reste c'est ok.
Les seules choses que je n'ai pas testé c'est tes modifications, les 2 boucles FOR, que j'ai intégré au début et à la fin du script, sinon le reste c'est ok.
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
>
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
Modifié le 28 mars 2017 à 10:55
Modifié le 28 mars 2017 à 10:55
Vérifie que tu as bien laissé un espace après le slash à droite dans cette commande :
for /f "tokens=1,2,3,* delims=/ " %%E in
Bon, bah c'est pas fini, j'ai besoin d'aide pour la suite, lorsque un fichier n'existe plus dans la source mais existe dans le dossier de destination, il faudrait que le fichier soit copié dans un dossier "old" avec si possible le nom de dernière modification.
J'essaye des trucs mais j'arrive pas à faire quelque chose qui marche, j'ai l'impression de tourner autours du vrai but.
Quelqu'un arriverait à m'aider?
Nicolas
J'essaye des trucs mais j'arrive pas à faire quelque chose qui marche, j'ai l'impression de tourner autours du vrai but.
Quelqu'un arriverait à m'aider?
Nicolas
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
27 mars 2017 à 17:02
27 mars 2017 à 17:02
Qu'est-ce que tu appelles le nom de dernière modification ?
Donne un exemple.
Donne un exemple.
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
Modifié le 27 mars 2017 à 17:23
Modifié le 27 mars 2017 à 17:23
Cette étape est à faire avant le reste du script alors ?
Parce que sinon les fichiers renommés avec la date du jour vont se retrouver avec une deuxième date en plus de la première.
Parce que sinon les fichiers renommés avec la date du jour vont se retrouver avec une deuxième date en plus de la première.
Désolé de la réponse tardive, non ça ne va pas mettre deux fois le nom, parce que les fichiers qui sont rename avec la date du jour sont dans les deux répertoires, alors que maintenant il faut rename les fichiers qui ne sont que dans le répertoire 2 donc aucun risque de double rename, mais l'ordre n'a pas beaucoup d'importance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
Modifié le 28 mars 2017 à 14:17
Modifié le 28 mars 2017 à 14:17
J'ai bien re-testé en profondeur, il n'y a pas de problème majeur :
Juste un petit détail à corriger dans la nouvelle étape mais ça n'est pas gênant.
A quoi sert ton cd à la fin ?
@echo off
set dossier1=%USERPROFILE%\Desktop\script\temp
set dossier2=%USERPROFILE%\Desktop\script\dossierfinal
set dossier3=%USERPROFILE%\Desktop\script\dossierfinal\old
if exist "%dossier1%" rmdir /S /Q "%dossier1%"
if not exist "%dossier1%" mkdir "%dossier1%"
if not exist "%dossier2%" mkdir "%dossier2%"
if not exist "%dossier3%" mkdir "%dossier3%"
For /f "tokens=*" %%a In ('dir /s /b /a-d "%USERPROFILE%\Desktop\script\source\*_IT.docx"') Do (Xcopy "%%a" "%dossier1%\")
set liste1=%USERPROFILE%\efface.txt
set liste2=%USERPROFILE%\renomme.txt
if exist "%liste1%" (del /F "%liste1%")
if exist "%liste2%" (del /F "%liste2%")
for /f "tokens=*" %%A in ('dir /b /a-d "%dossier1%\*.docx"') do (
for /f "tokens=*" %%B in ('dir /b /a-d "%dossier2%\*.docx"') do (
for /f "tokens=1,2,3,* delims=/ " %%E in ('dir "%dossier2%\%%~nxB" ^| findstr /V "volume pertoire octets"') do (
if not exist "%dossier1%\%%~nxB" (copy /V "%dossier2%\%%~nxB" "%dossier3%\%%~nB_%%G-%%F-%%E%%~xB" > nul && echo Copie de : %dossier2%\%%~nxB)
)
if /i "%%~nxA"=="%%~nxB" (echo. & echo N | comp "%dossier1%\%%~nxA" "%dossier2%\%%~nxB" | findstr /C:"OK" && echo %%~nxA >> %liste1%)
if /i "%%~nxA"=="%%~nxB" (echo. & echo N | comp "%dossier1%\%%~nxA" "%dossier2%\%%~nxB" | findstr /C:"OK" || echo %%~nxB >> %liste2%)
)
)
if not exist "%liste1%" goto suite
cd %dossier1%
for /f "tokens=*" %%C in (%liste1%) do (del /F "%%C" && echo Suppression de : %dossier1%\%%C)
:suite
if not exist "%liste2%" goto fin
cd %dossier2%
for /f "tokens=*" %%D in (%liste2%) do (ren "%%D" "%%~nD_%date:~6,4%-%date:~3,2%-%date:~0,2%%%~xD" && echo Renommage de : %dossier2%\%%D)
:fin
For /f "tokens=*" %%a In ('dir /b /a-d "%dossier1%\*.docx"') Do (Xcopy "%%a" "%dossier2%\")
cd %USERPROFILE%\Desktop\script\
rmdir /S /Q "%dossier1%"
del /F "%liste1%"
del /F "%liste2%"
exit
Juste un petit détail à corriger dans la nouvelle étape mais ça n'est pas gênant.
A quoi sert ton cd à la fin ?
Bon de plus en plus bizarre, avec ton dernier script, si il y a aucun fichier dans la destination ( %dossier2% ) aucune copie ne se fait, mais si il y a juste un seul fichier qui est égal au dossier temp la copie se fait bien
Mais pourtant ça marche avec la dernière version que j'ai posté.
Mais outre ce problème la copie dans old ne se fait toujours pas
De plus en plus bizarre ce script, il faudrait que j'essaye sur un autre PC
Mais pourtant ça marche avec la dernière version que j'ai posté.
Mais outre ce problème la copie dans old ne se fait toujours pas
De plus en plus bizarre ce script, il faudrait que j'essaye sur un autre PC
Sinon c'est possible de le faire en 2 commandes différentes? Parce que j'ai essayé en modifiant la ligne mais ça marche pas
Et j'avais pas vu la question, le dossier ne se supprimait pas sans cd et en cherchant sur internet j'ai vu quelqu'un dire qu'il fallait mettre un cd avant, je l'ai mit et depuis ça marche
if not exist "%dossier1%\%%~nxB" (copy /V /Y "%dossier2%\%%~nxB" "%dossier3%\%%~nxB" && rename %dossier3%\%%~nxB %%~nB_%%G-%%F-%%E%%~xB )
Et j'avais pas vu la question, le dossier ne se supprimait pas sans cd et en cherchant sur internet j'ai vu quelqu'un dire qu'il fallait mettre un cd avant, je l'ai mit et depuis ça marche
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
Modifié le 28 mars 2017 à 14:59
Modifié le 28 mars 2017 à 14:59
avec ton dernier script, si il y a aucun fichier dans la destination ( %dossier2% ) aucune copie ne se fait
==>> c'est un comportement normal puisqu'il n'y a rien à comparer
Pourtant c'est exactement ce qui est demandé :
1) si 2 fichiers ont le même nom et la même taille : supprimer celui du dossier1
2) si 2 fichiers ont le même nom mais pas la même taille : renommer celui du dossier2
3) si le fichier est présent dans dossier2 mais pas dans dossier1 : le copier dans dossier3
==>> c'est un comportement normal puisqu'il n'y a rien à comparer
Pourtant c'est exactement ce qui est demandé :
1) si 2 fichiers ont le même nom et la même taille : supprimer celui du dossier1
2) si 2 fichiers ont le même nom mais pas la même taille : renommer celui du dossier2
3) si le fichier est présent dans dossier2 mais pas dans dossier1 : le copier dans dossier3
nicolas.74
>
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
28 mars 2017 à 14:51
28 mars 2017 à 14:51
Ah oui je comprends, je pensais pas que ça marchait comme ça
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
>
nicolas.74
28 mars 2017 à 15:05
28 mars 2017 à 15:05
Au début j'avais fait en 2 commandes comme toi au-dessus mais impossible à faire fonctionner, ensuite j'ai compris que je pouvais copier et renommer en une seule commande et ça a marché.
Bonjour,
Je reviens à vous une dernière fois, j'aime bien comprendre ce que je fais, quelqu'un arriverait à m'expliquer ce que cette commande fait ?
Parce que j'ai beau la décortiquer dans tous les sens j'arrive pas à comprendre
Merci d'avance,
Nicolas
Je reviens à vous une dernière fois, j'aime bien comprendre ce que je fais, quelqu'un arriverait à m'expliquer ce que cette commande fait ?
for /f "tokens=1,2,3,* delims=/ " %%E in ('dir "%dossier2%\%%~nxB" ^| findstr /V "volume pertoire octets"') do (
Parce que j'ai beau la décortiquer dans tous les sens j'arrive pas à comprendre
Merci d'avance,
Nicolas
barnabe0057
Messages postés
14452
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 août 2024
4 917
Modifié le 29 mars 2017 à 10:08
Modifié le 29 mars 2017 à 10:08
Salut, cette commande a pour but de récupérer la date de modification d'un fichier, la commande dir permet de lister le fichier ainsi que sa date de modification, ensuite le findstr sert à supprimer les lignes superflues générées par la commande dir pour ne garder que la ligne qui contient la date, ensuite le for récupère et décompose la date en 3 parties (jour, mois, année)
Modifié le 27 mars 2017 à 15:03
Voilà mon code final: