A voir également:
- Impossible de réaliser une copie cyclique
- Fichier rar - Guide
- Déplacer une colonne excel - Guide
- Fichier batch - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
18 réponses
Essaye ca :
@echo off
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2006" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %%I IN (tmp2) DO @echo %%I
rem On efface le fichier tmp2
del tmp2
@echo off
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2006" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %%I IN (tmp2) DO @echo %%I
rem On efface le fichier tmp2
del tmp2
Pardon, ça prouve que je suis pas un bon développeur ;p
DIR /O:D /T:W > tmp
Je fait un dir pour lister les fichiers du répertoire. L'option O:D permet de trier les entrées par date, l'option T:W défini le champ date comme étant la date de dernière modification. le > tmp permet de rediriger la sorti vers un fichier tmp (j'aurai pu l'apeler toto.txt si tu préfère...), ce qui fait qu'il n'y aura pas d'affichage du dir mais que tout sera dans un fichier tmp (si tu execute la commande dans une fenêtre cmd (Démarrer > Executer > cmd ), tu ne vera rien s'afficher, mais si tu ouvre tmp avec notepad, tu verra l'affichage du dir!
FINDSTR /V /C:"<REP>" "tmp" | FINDSTR /C:"/2006" > tmp2
La j'ai été cruel avec toi! j'utilisae findstr pour chercher les lignes dans le fichier tmp NE CONTENANT PAS (option /V) la chaine de charactère (le /C:) <REP> pour ne garder que les fichiers. le | est ce que l'on appel un "pipe", il permet de rediriger (comme le > ci-dessus!) la sorti de la commande vers une autre commande, qui est en l'occurence un autre findstr qui va chercher les lignes CONTENANT la chaine de charactère /2006 dans le résultat (et donc uniquement la liste de fichier, sans les répertoire) de la précedente commande.
FOR /F "tokens=4" %%I IN (tmp2) DO @ECHO %%I
En gros, ca dit "Pour chaques 4em champqui vont être égal a I dans le fichier tmp2, execute la commande @ECHO (le @ permet de ne pas afficher la ligne c:\echo ...) avec le contenu de I. Les champs sont les entrées séparré par des espaces ou des tabulations (regarde l'affichage du dir, et tu verra que le nom de fichier est dans le quatrième champ).
Les deux % c'est pour le script, dans une fenêtre de commande, un seul suffit (voir cmd /?)
Pour toi, tu remplacera le echo par un DEL /F /Q
Je t'invite a taper chaque commande avec /? en paramètre pour afficher l'aide, tu auras plus de détails.
En fait si tu regarde bien, j'aurai pu écrire :
DIR /T:W | FINDSTR /V /C:"<REP>" | FINDSTR /C:"/2006" > tmp
FOR /F "tokens=4" %%I IN (tmp) DO @ECHO %%I
Mais j'ai préféré décomposer un peut
DIR /O:D /T:W > tmp
Je fait un dir pour lister les fichiers du répertoire. L'option O:D permet de trier les entrées par date, l'option T:W défini le champ date comme étant la date de dernière modification. le > tmp permet de rediriger la sorti vers un fichier tmp (j'aurai pu l'apeler toto.txt si tu préfère...), ce qui fait qu'il n'y aura pas d'affichage du dir mais que tout sera dans un fichier tmp (si tu execute la commande dans une fenêtre cmd (Démarrer > Executer > cmd ), tu ne vera rien s'afficher, mais si tu ouvre tmp avec notepad, tu verra l'affichage du dir!
FINDSTR /V /C:"<REP>" "tmp" | FINDSTR /C:"/2006" > tmp2
La j'ai été cruel avec toi! j'utilisae findstr pour chercher les lignes dans le fichier tmp NE CONTENANT PAS (option /V) la chaine de charactère (le /C:) <REP> pour ne garder que les fichiers. le | est ce que l'on appel un "pipe", il permet de rediriger (comme le > ci-dessus!) la sorti de la commande vers une autre commande, qui est en l'occurence un autre findstr qui va chercher les lignes CONTENANT la chaine de charactère /2006 dans le résultat (et donc uniquement la liste de fichier, sans les répertoire) de la précedente commande.
FOR /F "tokens=4" %%I IN (tmp2) DO @ECHO %%I
En gros, ca dit "Pour chaques 4em champqui vont être égal a I dans le fichier tmp2, execute la commande @ECHO (le @ permet de ne pas afficher la ligne c:\echo ...) avec le contenu de I. Les champs sont les entrées séparré par des espaces ou des tabulations (regarde l'affichage du dir, et tu verra que le nom de fichier est dans le quatrième champ).
Les deux % c'est pour le script, dans une fenêtre de commande, un seul suffit (voir cmd /?)
Pour toi, tu remplacera le echo par un DEL /F /Q
Je t'invite a taper chaque commande avec /? en paramètre pour afficher l'aide, tu auras plus de détails.
En fait si tu regarde bien, j'aurai pu écrire :
DIR /T:W | FINDSTR /V /C:"<REP>" | FINDSTR /C:"/2006" > tmp
FOR /F "tokens=4" %%I IN (tmp) DO @ECHO %%I
Mais j'ai préféré décomposer un peut
Ha, temps que j'y suis, quelques améliorations possibles :
Remplacer /2006 par une variable que tu peut définir en paramètre de ton script (claques paramètre correspondant a %1, %2....%0 étant le nom du script)
Rajouter une variable après les option du dir contenant le chemin d'accès aux fichiers que tu veut traiter
...
Je te conseil de taper HELP dans une interface de commande, tu verra les commande de base du shell windows et NET HELP pour voir ce que l'on appel les commandes NT4
Remplacer /2006 par une variable que tu peut définir en paramètre de ton script (claques paramètre correspondant a %1, %2....%0 étant le nom du script)
Rajouter une variable après les option du dir contenant le chemin d'accès aux fichiers que tu veut traiter
...
Je te conseil de taper HELP dans une interface de commande, tu verra les commande de base du shell windows et NET HELP pour voir ce que l'on appel les commandes NT4
Heu, effectivement, en VBS c'est mieux...Désolé, je trouvai ça fun de le faire en batch!
Mais floriaan60, je te conseil de te mettre au VBS pour l'administration Windows, bien que personnellement je n'aime pas du tout (je trouve pas ce langage logique, je préfère le C/C++ ou les langages shell d'unix (BASH, KSH...) qui sont plus simples a mon gout)
Mais floriaan60, je te conseil de te mettre au VBS pour l'administration Windows, bien que personnellement je n'aime pas du tout (je trouve pas ce langage logique, je préfère le C/C++ ou les langages shell d'unix (BASH, KSH...) qui sont plus simples a mon gout)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yoogui
Messages postés
2021
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
13 avril 2011
316
5 juin 2008 à 09:50
5 juin 2008 à 09:50
xcopy avec option /D ?
bah j'aimerai utiliser move ...
ou alors copier puis suprimmer
ou alors copier puis suprimmer
yoogui
Messages postés
2021
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
13 avril 2011
316
5 juin 2008 à 10:18
5 juin 2008 à 10:18
xcopy c:\Temp*.?????? c:\2006 /s /e
Kesako que le ".?????" ?
Cmd = xcopy [source] [Dest] [Option]
La tu as 3 paramètres..le 2nd est étrange
Kesako que le ".?????" ?
Cmd = xcopy [source] [Dest] [Option]
La tu as 3 paramètres..le 2nd est étrange
d'accor.
Mais au final, il est ou mon dossier avec tous les fichier non modifié depuis 2006 ? lol
Mais au final, il est ou mon dossier avec tous les fichier non modifié depuis 2006 ? lol
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
5 juin 2008 à 15:08
5 juin 2008 à 15:08
Je crois qu'il est nul part pour l'instant, il ne fait que les afficher ( echo %%i ).
Si tu veux les déplacer, remplaces echo %%i par move %%i D:\TonDossier
Si tu veux les déplacer, remplaces echo %%i par move %%i D:\TonDossier
au final j'ai ce code:
@echo off
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2006" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %I IN (tmp2) DO move %%i C:\2006
rem On efface le fichier tmp2
del tmp2
J'ai tmp2 qui se créer sur mon bureau mais c'est tous ce que je vois lol
@echo off
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2006" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %I IN (tmp2) DO move %%i C:\2006
rem On efface le fichier tmp2
del tmp2
J'ai tmp2 qui se créer sur mon bureau mais c'est tous ce que je vois lol
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
5 juin 2008 à 15:19
5 juin 2008 à 15:19
Dans l'état le batch doit être situé dans le même répertoire où sont les données à bouger. Si tu veux pouvoir le lancer depuis n'importe quel emplacement, il faut que tu rajoutes au début du batch la commande
DIR C:\TonRepertoireSource /O:D /T:W > tmp (mets des guillements si le nom du répertoire source contient des espaces. "C:\Documents dnd Settings\User\Mes documents" par exemple)
Il y a quelque chose dans C:\2006 ?
Ouvre ton fichier tmp2 avec le bloc notes, y'a quoi dedans ?
DIR C:\TonRepertoireSource /O:D /T:W > tmp (mets des guillements si le nom du répertoire source contient des espaces. "C:\Documents dnd Settings\User\Mes documents" par exemple)
Il y a quelque chose dans C:\2006 ?
Ouvre ton fichier tmp2 avec le bloc notes, y'a quoi dedans ?
J'ai enlevé le contenu de 2006
J'ai mis le .bat dans le dossier de ce que je veux copier.
2006 est vide
tmp2 est vide
mais es-ce qu'il copie les dossier ?
J'ai mis le .bat dans le dossier de ce que je veux copier.
2006 est vide
tmp2 est vide
mais es-ce qu'il copie les dossier ?
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
5 juin 2008 à 15:32
5 juin 2008 à 15:32
Ca donne quoi un DIR /OD /TW à la main sous DOS ? Y'a bien des fichiers 2006 en premier ?
Pour les sous-dossiers, il ne les parcoure pas, et c'est au dessus de mes compétences.
Au fait, pourquoi à tout prix un batch ?
Pour les sous-dossiers, il ne les parcoure pas, et c'est au dessus de mes compétences.
Au fait, pourquoi à tout prix un batch ?
floriaan60
>
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
5 juin 2008 à 15:49
5 juin 2008 à 15:49
je viens de remarquer que je n'avais pas de fichier 2006 lol
j'ai donc changé et mis 2008
maintenant dans tmp2 il y a 3 fichiers mais rien dans 2006
j'ai donc changé et mis 2008
maintenant dans tmp2 il y a 3 fichiers mais rien dans 2006
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
>
floriaan60
5 juin 2008 à 15:52
5 juin 2008 à 15:52
Tu as cette ligne là :
for /F "tokens=4" %I IN (tmp2) DO move %%i C:\2006
ou celle là
for /F "tokens=4" %%I IN (tmp2) DO move %%i C:\2006 ?
Seule la seconde est bonne.
Et pourquoi un batch ?
for /F "tokens=4" %I IN (tmp2) DO move %%i C:\2006
ou celle là
for /F "tokens=4" %%I IN (tmp2) DO move %%i C:\2006 ?
Seule la seconde est bonne.
Et pourquoi un batch ?
Heu essaye plutot :
dir "c:\ton repertoire" /O:D /T:W
N'oublie pas les deux point sinon, ca ne marche pas.
Désolé, j'avais oublié que tu voulais déplacer...
T'as pas un fichier 2006 sur ton c:\ des fois? dans le doute, rajoute les guillement autour de c:\2006 et met un \ a la fin. Rajoute aussi le chemin complet de ton fichier source.
for /F "tokens=4" %I IN (tmp2) DO move "c:\ton repertoire\"%%i "C:\2006\"
Pour pas t'embéter, aprés le @echo off, rajoute la ligne SET MONREP="c:\monrepertoire\" et remplace "c:\monrepertoire\" par %%MONREP
dir "c:\ton repertoire" /O:D /T:W
N'oublie pas les deux point sinon, ca ne marche pas.
Désolé, j'avais oublié que tu voulais déplacer...
T'as pas un fichier 2006 sur ton c:\ des fois? dans le doute, rajoute les guillement autour de c:\2006 et met un \ a la fin. Rajoute aussi le chemin complet de ton fichier source.
for /F "tokens=4" %I IN (tmp2) DO move "c:\ton repertoire\"%%i "C:\2006\"
Pour pas t'embéter, aprés le @echo off, rajoute la ligne SET MONREP="c:\monrepertoire\" et remplace "c:\monrepertoire\" par %%MONREP
j'ai cette ligne
for /F "tokens=4" %I IN (tmp2) DO move "C:\Documents and Settings\fdefrocourt\"%%i "C:\2006\"
for /F "tokens=4" %I IN (tmp2) DO move "C:\Documents and Settings\fdefrocourt\"%%i "C:\2006\"
code du batch:
@echo off
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2008" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %I IN (tmp2) DO move "C:\Documents and Settings\fdefrocourt\"%%i "C:\2006\"
rem On efface le fichier tmp2
del tmp2
@echo off
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2008" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %I IN (tmp2) DO move "C:\Documents and Settings\fdefrocourt\"%%i "C:\2006\"
rem On efface le fichier tmp2
del tmp2
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
>
floriaan60
5 juin 2008 à 16:03
5 juin 2008 à 16:03
for /F "tokens=4" %%I IN (tmp2) DO move "C:\Documents and Settings\fdefrocourt\"%%i "C:\2006\"
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
>
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
5 juin 2008 à 16:04
5 juin 2008 à 16:04
Au fait POURQUOI UN BATCH (mais tu vas répondre à la fin ?)
floriaan60
>
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
5 juin 2008 à 16:07
5 juin 2008 à 16:07
Alors la je n'ai plus de tmp2 et le dossier 2006 est vide lol
un batch pour automatiser le travail des déplacements :d
un batch pour automatiser le travail des déplacements :d
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
>
floriaan60
5 juin 2008 à 16:14
5 juin 2008 à 16:14
Je me doute que c'est pour automatiser les déplacements, mais un script vbs serait beaucoup plus simple à faire qu'un fichier bat où il faut souvent alambiquer autour des commandes DOS.
De plus un script VBS permettrait de gérer les sous-dossiers, ce qui me semble mission impossible en bat
De plus un script VBS permettrait de gérer les sous-dossiers, ce qui me semble mission impossible en bat
J'ai Windows XP SP2 et ca ca marche chez moi (en gras ce que j'ai modifié
@echo off
SET MONREP=c:\
echo %MONREP%
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir %MONREP% /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2006" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %%I IN (tmp2) DO copy "%MONREP%%%I" C:\2006
rem On efface le fichier tmp2
del tmp2
@echo off
SET MONREP=c:\
echo %MONREP%
rem on liste les fichiers du répertoire en cour en triant par date de modification et on écrit la liste dan le fichier tmp
dir %MONREP% /O:D /T:W > tmp
rem On ne garde que les fichier et on ne garde que ceux de 2006
findstr /V /C:"<REP>" "tmp"|findstr /C:"/2006" > tmp2
rem On efface le fichier tmp
del tmp
rem pour chaque entrée, on efface le fichier, ici simulé par un echo (del /F /Q)
for /F "tokens=4" %%I IN (tmp2) DO copy "%MONREP%%%I" C:\2006
rem On efface le fichier tmp2
del tmp2
Et pour info, ni
for /F "tokens=4" %I IN (tmp2) DO move %%i C:\2006
ni
for /F "tokens=4" %%I IN (tmp2) DO move %%i C:\2006
ne marcheront parceque c'est
for /F "tokens=4" %I IN (tmp2) DO move %%I C:\2006
for /F "tokens=4" %I IN (tmp2) DO move %%i C:\2006
ni
for /F "tokens=4" %%I IN (tmp2) DO move %%i C:\2006
ne marcheront parceque c'est
for /F "tokens=4" %I IN (tmp2) DO move %%I C:\2006
Tu peut retirer le echo %MONREP%, c'est juste pour le debuging et remplace copy par move.
Je pense que si l'un marche, l'autre marchera aussi.
Je pense que si l'un marche, l'autre marchera aussi.
déplacement ok aussi.
et vous n'aurez pas une astuce pour copier aussi les dossiers qui contiennent des fichiers de 2006 avec l'arborescence ?
et vous n'aurez pas une astuce pour copier aussi les dossiers qui contiennent des fichiers de 2006 avec l'arborescence ?
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
5 juin 2008 à 16:21
5 juin 2008 à 16:21
Voir Commentaire 29
floriaan60
>
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
5 juin 2008 à 16:25
5 juin 2008 à 16:25
ah désolé il été caché.
Et en vbs ca donnerai quoi ?
Et en vbs ca donnerai quoi ?
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
>
floriaan60
5 juin 2008 à 16:32
5 juin 2008 à 16:32
Quelque chose comme ca :
Surement perfectible : suppression des dossiers vides par exemple
Sub DeplaceFichiers(LaSource, LaDestination) ' Crée le répertoire cible If Not Fso.FolderExists(LaDestination) Then fso.CreateFolder LaDestination End If Set Dossier = fso.GetFolder(LaSource) Set Fichiers = Dossier.Files ' Déplace les fichiers For Each fichier in fichiers If year(fichier.DateLastModified) ="2006" Then fso.MoveFile fichier.path, LaDestination End If Next ' Sous-dossiers Set Dossiers = fso.GetFolder(LaSource).SubFolders For Each dossier in Dossiers ' Récursivité DeplaceFichiers dossier.path, LaDestination & dossier.name & "\" Next End Sub Set fso = CreateObject("Scripting.FileSystemObject") Source = "H:\DISQUE_F_A_TRIER" Dest = "H:\VieuxFichiers\" DeplaceFichiers Source, Dest
Surement perfectible : suppression des dossiers vides par exemple
Hum, t'es pas compliqué toi comme gars ;p
Moi je ferai un fichier rep.txt dans le même dossier que mon batch, contenant la liste de tout les chemins concernés (ATTENTION NE PAS FAIRE CA DANS C:\WINNT\SYSTEM32)
Je créerai ensuite un batch contenant un truc du style(je te laisse perfectionner...) :
FOR %%J IN (rep.txt) DO CALL batch1.bat %%J
et dans batch1.bat, je remplacerai SET MONREP=c:\ par SET MONREP=%1%
Mais il doit y avoir d'autres moyen.
Le poste 29, je l'ai pas trouvé, c'est normal?
Moi je ferai un fichier rep.txt dans le même dossier que mon batch, contenant la liste de tout les chemins concernés (ATTENTION NE PAS FAIRE CA DANS C:\WINNT\SYSTEM32)
Je créerai ensuite un batch contenant un truc du style(je te laisse perfectionner...) :
FOR %%J IN (rep.txt) DO CALL batch1.bat %%J
et dans batch1.bat, je remplacerai SET MONREP=c:\ par SET MONREP=%1%
Mais il doit y avoir d'autres moyen.
Le poste 29, je l'ai pas trouvé, c'est normal?
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
120
5 juin 2008 à 16:35
5 juin 2008 à 16:35
Parce que t'as mal cherché, il est au dessus du 25 :)
5 juin 2008 à 13:40