A voir également:
- Impossible de réaliser une copie cyclique
- Fichier bin - Guide
- Fichier epub - Guide
- Déplacer colonne excel - Guide
- Fichier batch - Guide
- Fichier rar - 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
floriaan60
Ouais... Euh tu peux m'expliquer un petit peu plus en detail ? Parce que je comprend pas tous le code lol
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
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
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
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 ?
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
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 ?
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?