J'ai besoin d'un script de lot pour sélectionner aléatoire x nombre de fichiers dans un dossier et déplacez-les dans un autre dossier. Comment écrire un script de lots Windows pouvant faire cela? P>
4 Réponses :
Le code de lot suivant le fera. Notez que vous devrez lancer CMD à l'aide de la ligne de commande suivante:
@ECHO OFF SET SrcCount=0 SET SrcMax=%RANDOM% FOR %F IN (C:\temp\source\*.*) DO IF !SrcCount! LSS %SrcMax% ( SET /A SrcCount += 1 ECHO !SrcCount! COPY %F C:\temp\output COPY %F C:\temp\output )
Ce que j'ai fait, copiez le code sur la console PowerShell. J'ai bien peur que cela ne fonctionnait pas. Cela m'a donné des erreurs qui sont en texte rouge.
Salut Techdaemon - Le code que j'ai publié était lot, qui est une langue complètement différente de Powershell. J'ai mis à jour le code de lot et cela devrait fonctionner maintenant, tant que vous utilisez "/ V: on" comme je l'énonce.
C'est un fichier de commandes. Pourquoi l'avez-vous copié à la console PowerShell et attendez-vous que cela fonctionne?
Le "SRCCount" est l'endroit où je spécifie le nombre de fichiers à choisir, n'est-ce pas?
Non - c'est un compteur afin qu'il sait combien de fichiers il a copiés. SRCMAX est le nombre de fichiers à copier. J'ai défini cela soit un nombre aléatoire car c'est ce que la question demandée.
@RB J'ai besoin de quelque chose où je peux spécifier le nombre de fichiers aléatoires qui seront sélectionnés. Je suis désolé si vous avez mal compris la question. @kurumi pardonnez-moi pour mon naïveté.
@TechDaemon Voulez-vous pouvoir spécifier le nombre de fichiers ou spécifier la plage d'un nombre aléatoire de fichiers?
@RB Je veux être capable de spécifier le nombre de fichiers s'il vous plaît.
Dans ce cas, définissez simplement SRCMAX pour être la valeur que vous souhaitez. Par exemple. SET SRCMAX = 25 code> Pour copier 25 fichiers.
Merci, mais ça ne marche toujours pas. J'ai sauvegardé le code à quelque chose.bat et double cliqué dessus mais aucun fichier n'est apparu dans C: \ Temp \ Sortie. Je me suis assuré que j'ai copié mes fichiers source sur C: \ Temp \ Source \. Et sur cmd \ v: sur code> Je ne comprends pas comment cela fonctionne avec le reste du code que vous avez écrit. Encore une fois, désolé pour mon naïveté.
Cliquez sur "Démarrer" -> "Exécuter" et tapez cmd \ v: sur code>. Cela lancera une invite de commande. Exécutez maintenant votre fichier de commandes à l'intérieur b> cette invite de commande. Ça devrait marcher ok. De toute évidence, vous devrez définir la source et la sortie des dossiers sur quelque chose sur votre machine et vous assurera que vous avez mis à jour
srcmax code>.
Toujours ne fonctionne pas. Cela me donne beaucoup "Le système ne peut pas trouver l'erreur spécifiée du fichier". Mais les noms de fichiers sont montrés. Je ne sais pas si la raison est des espaces et des caractères spéciaux dans les noms de fichiers.
(a) Il devrait être cmd / v: sur code> (une barre oblique inverse n'est pas une barre oblique). (b) Qu'est-ce que vous êtes écrit, il n'y aura seulement i> travailler dans la coque interactive, pas dans un fichier de commandes. (c) Vous voulez probablement quelques devis pour gérer correctement les noms de fichiers avec des espaces.
(je suppose que votre x em> est connu à l'avance - représenté par la variable Puisque vous n'étiez pas défavorable à une solution PowerShell: p> ou plus court: p> $ x code> dans le code suivant).
J'ai entré Get-Childitem C: \ Temp \ Source | Get -Count -Count 100 | Move-Item -Destination C: \ Temp \ Sortie Code> dans la console PowerShell, mais rien ne s'est passé
@Joey, j'ai essayé cela dans PowerShell parce que j'essaie d'obtenir un script pour changer de manière aléatoire mon écran de connexion. Mon répertoire source a été développé plusieurs dossiers dans mon répertoire utilisateur et pour une raison quelconque, la commande Move-Item a jeté une erreur lorsque j'ai essayé d'exécuter. Il a déclaré que ne peut pas trouver le chemin 'c: \ users \
@Rironin, j'ai édité le script original de Joey pour corriger l'erreur. Lors de l'obtention des articles du dossier, nous devons obtenir le nom complet du fichier, avant de le transmettre à l'aléatoire
@echo off & setlocal set "workDir=C:\source\folder" ::Read the %random%, two times is'nt a mistake! Why? Ask Bill. ::In fact at the first time %random% is nearly the same. @set /a "rdm=%random%" set /a "rdm=%random%" ::Push to your path. pushd "%workDir%" ::Count all files in your path. (dir with /b shows only the filenames) set /a "counter=0" for /f "delims=" %%i in ('dir /b ^|find "."') do call :sub1 ::This function gives a value from 1 to upper bound of files set /a "rdNum=(%rdm%*%counter%/32767)+1" ::Start a random file set /a "counter=0" for /f "delims=" %%i in ('dir /b ^|find "."') do set "fileName=%%i" &call :sub2 ::Pop back from your path. popd "%workDir%" goto :eof :: end of main :: start of sub1 :sub1 ::For each found file set counter + 1. set /a "counter+=1" goto :eof :: end of sub1 :: start of sub2 :sub2 ::1st: count again, ::2nd: if counted number equals random number then start the file. set /a "counter+=1" if %counter%==%rdNum% ( :: OUTPUT ALERT BOX with FILENAME MSG * "%fileName%" ) goto :eof :: end of sub2
Lol demander bill: D
@echo off setlocal EnableDelayedExpansion cd \particular\folder set n=0 for %%f in (*.*) do ( set /A n+=1 set "file[!n!]=%%f" ) set /A "rand=(n*%random%)/32768+1" copy "!file[%rand%]!" \different\folder from Need to create a batch file to select one random file from a folder and copy to another folder
Cela doit-il être en lot? Il serait beaucoup plus simple de mettre en œuvre dans PowerShell.
Je ne sais pas comment utiliser PowerShell. Mais je peux l'essayer. Aidez-moi, s'il vous plaît.