Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zufallsverschiebung

Frage Entwicklung Batch & Shell

Mitglied: MISTAX

MISTAX (Level 1) - Jetzt verbinden

18.02.2008, aktualisiert 26.02.2008, 3068 Aufrufe, 8 Kommentare

Hallo,

ich habe hier im Forum von Biber schon ein Script gefunden, was das macht, was ich möchte.
Ich habe es jetzt angepasst und es funktioniert fast... Aber jetzt komme ich nichtmehr weiter - eventuell weiss jmd. von euch weiter?

01.
set "path=c:\batch\" 
02.
 
03.
 
04.
setlocal EnableDelayedExpansion 
05.
echo Setting Target and Source 
06.
Set "quell=%path%\Pool" & set "target=%path%\Play" 
07.
 
08.
echo Calculating max. Files in Directory 
09.
Set /a "max=0, lfdnr=0" 
10.
for /f %%i in ('dir /b /a:-d %quell%') do set /a "max+=1" 
11.
echo Files in Directory: %max% 
12.
if %max%==0 goto empty 
13.
if %max%==1 move "%path%\Pool\*.mpg" "%path%\Play\" & goto end 
14.
 
15.
echo Randomize 
16.
:Again 
17.
For %%i in (f_1) do set /a "%%i=!random!%%%max%" 
18.
 
19.
echo Executing 
20.
for /f %%i in ('dir /b /a:-d %quell%') do ( 
21.
  set /a "lfdnr+=1" 
22.
  @for %%a in (%f_1%) do ( 
23.
   if %%a==!lfdnr! move %quell%\%%~nxi %target% 
24.
)) 
25.
 
26.
goto end 
27.
 
28.
:empty 
29.
echo Verzeichnis leer 
30.
pause 
31.
 
32.
:end

Ich habe Ordner Pool und Ordner Play

Im Ordner Pool sind X .mpg Files vorhanden, die nacheinander in zufälliger Reihenfolge in den Ordner Play verschoben werden sollen, bis keine mehr in Pool sind.

Bei jedem Ausführen der .bat soll eine Datei verschoben werden.

Probleme:

- Die letzte Datei wird nie verschoben, habe deswegen diese Zeile eingefügt:
01.
if %max%==1 move "%path%\Pool\*.mpg" "%path%\Play\" & goto end
geht aber sicherlich auch noch eleganter, oder?

- Manchmal macht die .bat garnichts, obwohl noch Dateien da sind - wieso? Dies ist mittlerweile mein größtes Problem.

danke!
Mitglied: Biber
18.02.2008 um 07:27 Uhr
Moin MISTAX,

versuche es im ersten Anlauf mal so:

01.
@echo off & setlocal EnableDelayedExpansion 
02.
REM hier: Kollisionen mit der "globalen" %path%-Variable vermeiden 
03.
REM Mindestens sollte das "set path=.." innerhalb der Setlocal-Anweisung 
04.
REM Besser noch, der hier benutzte Pfad heißt %mypath%" oder %pfad%  
05.
set "MYpath=c:\batch\" 
06.
echo Setting Target and Source 
07.
Set "quell=%MYpath%\Pool" & set "target=%MYpath%\Play" 
08.
 
09.
echo Calculating max. Files in Directory 
10.
Set /a "max=0, lfdnr=0" 
11.
for /f %%i in ('dir /b /a:-d %quell%\*.mpg') do set /a "max+=1" 
12.
echo Files in Directory: %max% 
13.
if %max%==0 goto empty 
14.
REM if %max%==1 move "%path%\Pool\*.mpg" "%path%\Play\" & goto end 
15.
 
16.
echo Randomize 
17.
:Again 
18.
REM For %%i in (f_1) do set /a "%%i=!random!%%%max%" 
19.
set /a "f_1=%random% %% max" 
20.
Echo [DEBUG] f_1 ist [%f_1%] und max ist [%max%] 
21.
echo Executing 
22.
for /f %%i in ('dir /b /a:-d %quell%\*.mpg') do ( 
23.
  set /a "lfdnr+=1" 
24.
   if %f_1%==!lfdnr! ( 
25.
       Echo [DEBUG] verschiebe Datei No. [%f_1%] --  und zwar [%%~nxi] 
26.
       ECHO move %quell%\%%~nxi %target% 
27.
)) 
28.
 
29.
goto end 
30.
 
31.
:empty 
32.
echo Verzeichnis leer 
33.
pause 
34.
 
35.
:end
So lässt sich die Batch erstmal testen.
Dann schauen wir weiter.

Grüße
Biber
Bitte warten ..
Mitglied: Biber
20.02.2008 um 19:47 Uhr
Hallo MISTAX,

gibt es irgendwas, was wir hier im Forum wissen sollten?

Grüße
Biber
Bitte warten ..
Mitglied: MISTAX
20.02.2008 um 20:00 Uhr
Hallo Biber,

vielen Dank für deine sehr schnelle Antwort - in einem ersten paste-copy-execute Schnelltest, hat sich das Fenster sofort wieder geschlossen und nichts ist passiert (wie bei einem falschen goto Verweis)

Leider habe ich kurzfristig Arbeit aufgedrückt bekommen, so dass ich vor dem WE nicht zu weiteren Tests komme.
Ich bedanke mich für die freundliche Hilfe, bitte aber noch um etwas Geduld, bis ich eine sinnvolle Antwort posten kann.

Grüße
Martin
Bitte warten ..
Mitglied: MISTAX
26.02.2008 um 00:01 Uhr
Also, ich hab jetzt etwas getestet, bis zur for-Schleife (executing) kommt er, danach fliegt er raus - sprich die batch wird beendet, nichts passiert.


01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
 
04.
echo Setting Target and Source 
05.
set "MYpath=c:\batch" 
06.
Set "quell=%MYpath%\Pool\" & set "target=%MYpath%\Play\" 
07.
 
08.
 
09.
echo Calculating max. Files in Directory 
10.
Set /a "max=0, lfdnr=0" 
11.
for /f %%i in ('dir /b /a:-d %quell%\*.mpg') do set /a "max+=1" 
12.
echo Files in Directory: %max% 
13.
if %max%==0 goto empty 
14.
 
15.
 
16.
echo Randomize 
17.
set /a "f_1=%random% %% max" 
18.
Echo [DEBUG] f_1 ist [%f_1%] und max ist [%max%] 
19.
 
20.
 
21.
echo Executing 
22.
for /f %%i in ('dir /b /a:-d %quell%*.mpg') do ( 
23.
  set /a "lfdnr+=1" 
24.
   if %f_1%==!lfdnr! ( 
25.
       Echo [DEBUG] verschiebe Datei No. [%f_1] --  und zwar [%%~nxi] 
26.
       ECHO move %quell%\%%~nxi %target% 
27.
)) 
28.
goto end 
29.
 
30.
:empty 
31.
echo Verzeichnis leer 
32.
pause 
33.
 
34.
:end 
35.
pause
Bitte warten ..
Mitglied: Biber
26.02.2008 um 10:34 Uhr
Moin MISTAX,

sorry, sehe mit bloßem Auge keinen Fehler. Bzw. nur einen nicht entscheidenden.
---> Hier fehlt ein "%" nach der Variablen:
JETZT: Echo [DEBUG] verschiebe Datei No. [%f_1] -- und zwar [%%~nxi]
BESSER: Echo [DEBUG] verschiebe Datei No. [%f_1%] -- und zwar [%%~nxi]


Was gibt denn die Zeile aus
Echo [DEBUG] f_1 ist [%f_1%] und max ist [%max%]

Grüße
Biber
Bitte warten ..
Mitglied: MISTAX
26.02.2008 um 16:56 Uhr
Ich sehe gerade, dass ich wohl nicht oft genug getestet habe... Oft kommt:

01.
Echo [DEBUG] f_1 ist [0] und max ist [6]
Dann passiert garnichts; batch geth wieder zu.


Wenn man es aber oft genug probiert kommt irgendwann auch mal


01.
Echo [DEBUG] f_1 ist [6> X <0] und max ist [6]
Dann bekomme ich auch eine erfolgreiche Debug-Echo



Sprich, wenn f_1 = 0 ist gibt's nen Fehler, sonst funktioniert's
Bitte warten ..
Mitglied: Biber
26.02.2008 um 18:02 Uhr
Sorry, MISTAX,

da habe ich aber auch genüßlich mitgeschnarcht....

Logisch, die (Zufallszahl Mod Oberkante) muss natürlich um Eins erhöht werden....
Also bitte diese Zeile ändern:
set /a "f_1=%random% %% max +1"

Biber,
der doch lieber hätte Bäcker werden sollen
Bitte warten ..
Mitglied: MISTAX
26.02.2008 um 23:36 Uhr
Super - jetzt funktioniert es einwandfrei... hier die ganze Lösung:

01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
:PREPARATION 
04.
set "MYpath=C:\batch" 
05.
 
06.
echo Resetting Play-Folder 
07.
move "%MYpath%\Play\*.mpg" "%MYpath%\Pool\Used\" 
08.
if errorlevel 1 goto Filelock 
09.
 
10.
 
11.
:DECISSION 
12.
echo Setting Target and Source 
13.
Set "quell=%MYpath%\Pool\" & set "target=%MYpath%\Play\" 
14.
 
15.
echo Calculating max. Files in Directory 
16.
Set /a "max=0, lfdnr=0" 
17.
for /f %%i in ('dir /b /a:-d %quell%\*.mpg') do set /a "max+=1" 
18.
echo Files in Directory: %max% 
19.
if %max%==0 goto empty 
20.
 
21.
echo %max% Files available 
22.
 
23.
echo Randomize 
24.
set /a "f_1=%random% %% max +1" 
25.
 
26.
echo Move to Play-Folder 
27.
 
28.
for /f %%i in ('dir /b /a:-d %quell%*.mpg') do ( 
29.
  set /a "lfdnr+=1" 
30.
   if %f_1%==!lfdnr! ( 
31.
       Echo Moving File No. [%f_1%] which is [%%~nxi] 
32.
       move %quell%%%~nxi %target% 
33.
       set "playfile=%%~nxi" 
34.
)) 
35.
goto end 
36.
 
37.
 
38.
:EMPTY 
39.
echo Folder is empty 
40.
echo Recreating library 
41.
move "%MYpath%\Pool\Used\*.mpg" "%MYpath%\Pool\"  
42.
goto DECISSION 
43.
 
44.
 
45.
:Filelock 
46.
echo File locked, process stopped 
47.
pause 
48.
 
49.
 
50.
:end

Es ist immer nur eine Datei im Play-Folder; die wird vor jedem neuen Vorgang nach "Used" verschoben. Sobald im Pool keine Dateien mehr sind, beginnt das Ganze von Vorne.

Vielen Dank lieber Biber!


P.S. gibt es eigentlich die Möglichkeit per batch herrauszufinden, wielang eine MPG-Datei ist? -> besser ein neues Thema aufmachen, oder?
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...