1 votes

Sélectionner aléatoirement un fichier, le renommer et le déplacer dans un nouveau répertoire

Nous avons un répertoire qui se remplit de plus de 40 fichiers portant des noms de fichiers différents. Ils commencent tous avec la même structure de nom de fichier, mais une date est ajoutée à la fin.

Exemple:

FILE.txt.01012013
FILE.txt.01022013
FILE.txt.01032013

Je dois créer un fichier batch qui effectuera quelques actions complexes et d'autres moins complexes:

  1. sélectionner uniquement un fichier.
  2. Renommer ce fichier en un autre nom. (Exemple: TEST.txt) Remarque: Le nom du fichier renommé sera toujours TEST.txt)
  3. Déplacer le fichier renommé de son répertoire actuel vers un nouveau répertoire.
  4. 15 minutes plus tard... recommencer à partir de l'étape 1. (Remarque: Cela doit continuer à s'exécuter jusqu'à ce qu'il n'y ait plus de fichiers dans le répertoire d'origine.)

Ce que j'ai essayé: Mes compétences en fichiers batch sont très basiques, j'ai donc essayé de rechercher des suggestions sur le web. Je peux trouver du code pour renommer un fichier (mais vous devez mentionner le nom de fichier original). Je peux trouver du code pour trouver un fichier en utilisant un * dans le nom de fichier, mais je pense que cela sélectionne tous les fichiers du répertoire. J'ai besoin que cela se fasse un fichier à la fois, et toutes les 15 minutes. Une fois qu'un fichier est renommé et déplacé vers le nouveau répertoire... Il y a un processus de surveillance de fichiers qui prend ce fichier (dans cet exemple TEST.txt) et ingère les données. Une fois les données ingérées, le fichier est supprimé. Cela signifie que lorsque le fichier suivant est renommé en TEST.txt et déplacé dans le répertoire, il n'y aura aucune raison d'écraser le fichier précédent.

0voto

BDM Points 397

Cela semble être ce que vous voulez, cependant vous devez remplir les trous.

set count=0
for /f %%i in (chemin_du_fichier\*.*) do set /a count+=1
set test=%count%
:loop
if %test% neq %count% timeout /nobreak 900 >nul
set /a num=%random% %% %count% + 1
set /a count-=1
if %count% leq 0 goto end
for /f "skip=%num%" %%i in (chemin_du_fichier\*.*) do (
    ren %%i TEST.txt
    move TEST.txt chemin_du_fichier\
    goto loop
)
:end

Ce que cela fait:

  1. Découvrez combien de fichiers se trouvent dans un dossier (que vous devez changer).
  2. Créez un nombre aléatoire avec pour maximum la quantité de fichiers dans le dossier.
  3. Retirez-en un du nombre maximum, pour la prochaine fois.
  4. Passez un nombre aléatoire de fichiers (désigné par le nombre aléatoire) et choisissez le suivant.
  5. Renommez le fichier en TEXT.txt et déplacez-le vers chemin_du_fichier\ (que vous devez changer).
  6. Attendez 15 minutes (900 secondes).

En espérant que cela vous aide.

Remarque, vous devez changer **chemin_du_fichier** par les fichiers appropriés.

0voto

Endoro Points 2636

Essayez ceci, cela fait tout ce que vous avez demandé:

@echo off&setlocal enabledelayedexpansion
set "startfolder=folder1"
set "targetfolder=folder2"

cd /d "%startfolder%"
:randomstart
set /a filecnt=0
for %%i in (*) do set /a filecnt+=1
if %filecnt% equ 0 echo(aucun fichier trouvé dans %Startfolder%&goto:eof
set /a rd=(%random%%%%filecnt%)+1
set /a cnt=0
for %%i in (*) do set /a cnt+=1&if "!cnt!" equ "%rd%" set "randomfile=%%~i"
echo "%randomfile%"
move "%randomfile%" "%targetfolder%\test.txt"
ping -n 900 localhost >nul
goto:randomstart

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X