2010-07-13 8 views
0

J'ai une boîte Windows et un dossier contenant ces fichiers:Comment faire pour déplacer tous les fichiers sauf le plus récent dans un dossier?

2010-07-04 20:18    81 in01_Acct_20100704001.r 
2010-07-07 05:45    165 in01_Acct_20100706001.r 
2010-07-07 19:41    82 in01_Acct_20100707001.r 
2010-07-07 10:02    81 in01_Acct_20100707002.r 
2010-07-08 08:31    89 in01_Acct_20100708001.r 
2010-07-10 04:51    82 in01_Acct_20100709001.r 

et je veux utiliser un lot pour déplacer périodiquement tous ces fichiers dans un autre dossier, sauf le plus récent (c.-à-in01_Acct_20100709001.r), parce que cela Le fichier est parfois encore en cours d'écriture et le déplacement peut entraîner le remplacement du fichier dans le dossier de destination lors de la prochaine exécution du lot et entraîner la perte du contenu du fichier.

Toutes les idées sur ce cas seraient grandement appréciées.

+0

Quel est le code actuel que vous avez? –

+0

Le code actuel est move * .r D: \ destination \. Je savais que c'était faux mais je ne sais pas exactement comment le faire sous Windows ... – suyao

+0

Quelle version de Windows est-ce? Si vous pouvez utiliser powershell alors cela pourrait faciliter la programmation. –

Répondre

3

Je pense que ce script batch peut le faire:

dir /TW /O-D /A-D /B > %TEMP%\tempFiles.txt 
for /F "skip=1" %f IN (%TEMP%\tempFiles.txt) DO mv %f wherever 
del %TEMP%\tempFiles.txt 

Pour expliquer ce que cela fait:

  1. Est-ce que la liste des fichiers, triés par le temps modifié (le plus récent en premier) «/TW/OD ", ignore les répertoires"/AD "et stocke dans un fichier temporaire.
  2. Effectue une itération sur chaque ligne du fichier temporaire, en ignorant la première ligne (le fichier le plus récent), en exécutant la commande mv sur chacun d'entre eux.
  3. Supprime votre fichier temporaire.

Modifier: Selon le commentaire, voici une version en ligne - vous pouvez insérer la commande dir dans votre boucle:

for /F "skip=1" %f IN ('dir /TW /O-D /A-D /B') DO mv %f wherever 
+1

Ne peut-il pas utiliser le notation pour passer l'écriture de la sortie du répertoire dans un fichier? –

+0

@roguenot: vous avez raison, la première fois que je l'ai essayé, j'ai utilisé par erreur "caractères au lieu de" et cela n'a pas fonctionné – zdan

+0

Cela fonctionne totalement .Merci! Ďakujem! – suyao

0

Vérifiez les fenêtres for fonction de ligne de commande (vous serez intéressé par l'opérateur/F en utilisant 'commande'). Vous devriez pouvoir utiliser les options/b et/o avec dir pour générer la liste de fichiers requise. Ensuite, utilisez une variable pour ignorer la première (c'est-à-dire la plus récente, en supposant que l'ordre de tri est correct) et cela devrait être le cas. Je ne suis pas sur mon PC Windows à l'heure actuelle si désolé que je ne pourrais pas cuillère vous nourrir la réponse exacte :)

Questions connexes