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

BATCH In einer For-Schleife die Anzahl der durchlaufe und das Ende anzeigen lasse.

Frage Entwicklung Batch & Shell

Mitglied: Darkprodukt

Darkprodukt (Level 1) - Jetzt verbinden

15.02.2013, aktualisiert 14:28 Uhr, 1899 Aufrufe, 12 Kommentare

Guten Abend,

ich bin gerade dabei mir eine weitere Arbeitserleichterung zu Programmieren.
Bis jetzt hatte ich keine schwierigkeiten, bei den ersten 100 Zeilen, aber nun ist
ein Problem aufgetreten das ich nicht Lösen kan.

Hier die stelle die Probleme bereitet: (In einer beispiel Testdatei zu versuchs zwecken)
01.
rem /---- Dem Programm erteilte oder errechnete Parameter ----/ 
02.
set "Path=C:\Test" 
03.
set /a "Count1=1001" 
04.
set /a "Count2=1020" 
05.
rem /---------------------------------------------------------/ 
06.
 
07.
for /F "delims=" %%r in ("%TEMP%\tempren.txt") do ( 
08.
						  set "ln=%%r" && call :Rename && timeout /T 1 >NUL 
09.
10.
 
11.
pause 
12.
 
13.
:Rename 
14.
ren %ln% 
15.
CLS  
16.
echo Pfad: %Path%  
17.
echo.  
18.
echo.  
19.
echo ------ %Count1:~-3% von %Count2:~-3% ------ 
20.
echo. 
21.
set /a "Count1=%Count1%+1" 
22.
exit /b 0
Leider benennt es die Dateien nicht nach der Reihe um.
Es erzeugt lediglich diese Ausgabe:
01.
Pfad: C:\Test 
02.
 
03.
 
04.
------ 001 von 020 ------ 
05.
 
06.
Der Befehl "timeout" ist entweder falsch geschrieben oder 
07.
konnte nicht gefunden werden. 
08.
Drücken Sie eine beliebige Taste . . .
In der Datei "tempren.txt" steht sowas wie: "C:\Test\Datei1.txt" "001 2013.02.15.txt"

Außerdem noch eine kleinigkeit die mir aufgefallen ist.

Früher hatte Windows ja diese bescheurte Dateien sortierung, die so war:
01.
1.txt 
02.
10.txt 
03.
11.txt 
04.
... 
05.
2.txt 
06.
20.txt 
07.
21.txt 
08.
...
Neuerdings ist die Sortierung in dem Explorer richtig, also:
01.
1.txt 
02.
2.txt 
03.
... 
04.
10.txt 
05.
11.txt 
06.
... 
07.
20.txt 
08.
21.txt 
09.
...
aber in CMD mit 'dir /a-s-d-h /b' bekomme ich immer noch die alte Sortierung.

Wann wurde das geändert und wiso nicht im CMD?
Wie kan ich in CMD die Liste so konvertieren, dass sie so wie im Explorer ist?
Mitglied: bastla
15.02.2013, aktualisiert um 14:58 Uhr
Hallo Darkprodukt!

Es ist keine gute Idee, Systemvariablen mit eigenen Werten zu überschreiben - wenn Du also "%Path%" auf "C:\Test" setzt, ist es nicht verwunderlich, dass die "timeout.exe" nicht gefunden wird - daher eine andere Variable anstatt "%Path%" verwenden ...
Wie kan ich in CMD die Liste so konvertieren, dass sie so wie im Explorer ist?
Eigentlich nur, indem Du führende Nullen verwendest und die Dateien daher "0001.txt", "0002.txt" etc nennst.
Im Zweifelsfall würde ich übrigens eher
for /F "delims=" %%r in ("%TEMP%\tempren.txt") do call :Rename %%r & timeout /T 1 >NUL 
und im Unterprogramm
ren %1 %2
schreiben.
BTW:
set /a "Count1=%Count1%+1"
ließe sich auch so formulieren:
set /a Count1+=1
Damit funktioniert das Zählen (für das Ausgeben wäre trotzdem "delayedexpansion" erforderlich) auch innerhalb einer Schleife.

Grüße
bastla

P.S.:
Guten Abend,
In welcher Zeitzone bist Du denn gerade?
Bitte warten ..
Mitglied: Darkprodukt
15.02.2013, aktualisiert um 15:30 Uhr
Hallo bastla,

das mit "Path" hab ich mir auch kurtz überlegt, habs aber nach einem anderen Gedankenblitz wieder vergessen. ^^

Nach der änderung schließt sich die Batch datei, aber diesmal ohne eine Rückmeldung.
Änderungen:
01.
set "Bearbeitungspfad=C:\Test" 
02.
set /a "Count1=1001" 
03.
set /a "Count2=1020" 
04.
 
05.
for /F "delims=" %%r in ("%TEMP%\tempren.txt") do ( 
06.
						  call :Rename %%r && timeout /T 1 >NUL 
07.
08.
 
09.
pause 
10.
 
11.
:Rename 
12.
echo %1 %2 
13.
CLS  
14.
echo Pfad: %Bearbeitungspfad%  
15.
echo.  
16.
echo.  
17.
setlocal enabledelayedexpansion  
18.
echo ------ !Count1:~-3! von !Count2:~-3! ------ 
19.
echo. 
20.
set /a Count1+=1 
21.
endlocal 
22.
exit /b 0
Es bleibt an der gleichen stelle stehen wie sonst auch.

Edit1: Ohne "Pause" beendet es sich nach einer weile. (5...10s oder so)

Grüße Darkprodukt
Bitte warten ..
Mitglied: bastla
15.02.2013 um 16:09 Uhr
Hallo Darkprodukt!

So sollte das besser gehen:
01.
@echo off & setlocal 
02.
set "Bearbeitungspfad=C:\Test" 
03.
set /a "Count1=1001" 
04.
set /a "Count2=1020" 
05.
 
06.
for /F "usebackq delims=" %%r in ("%TEMP%\tempren.txt") do ( 
07.
						    call :Rename %%r & REM timeout /T 1 >NUL 
08.
                                                    set /a Count1+=1 
09.
10.
 
11.
goto :eof 
12.
 
13.
:Rename 
14.
echo ren %1 %2 
15.
echo Pfad: %Bearbeitungspfad%  
16.
echo.  
17.
echo.  
18.
echo ------ %Count1:~-3% von %Count2:~-3% ------ 
19.
echo. 
20.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
16.02.2013 um 00:11 Uhr
Hallo bastla,

funktioniert immernoch nicht.
Das Programm beendet sich einfach ca. 10s nach dem das ---- 001 von 020 ---- aufgetaucht ist.


Kannst du mir erklären welche ausgaben die %1 und %2 nach dem ren bringen?

Grüße Darkprodukt
Bitte warten ..
Mitglied: bastla
16.02.2013 um 00:18 Uhr
Hallo Darkprodukt!

Eine Zeile der Art
"C:\Test\Datei1.txt" "001 2013.02.15.txt"
in der "tempren.txt" würde für %1 "C:\Test\Datei1.txt" und für %2 "001 2013.02.15.txt" liefern ...

Poste doch bitte einmal die gesamte Ausgabe Deines Batchlaufs ("echo off" verwendest Du ja ohnehin nicht).

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
16.02.2013, aktualisiert um 12:59 Uhr
Hallo bastla,

Ok, das hab ich mir schon gedacht, aber wiso? In der for schleife verwende ich ja keine tokens und es wird ja die ganze zeile in %%r geschrieben, da in delims ja nichts angegeben wird.

Splittet die übergabe mit call %%r in tokens auf?

Der ganze ablauf meiner Test datei:
01.
C:\Users\%USERNAME%\Desktop\Programme\Batch>set "Bearbeitungspfad=C:\Test" 
02.
 
03.
C:\Users\%USERNAME%\Desktop\Programme\Batch>set /a "Count1=1001" 
04.
 
05.
C:\Users\%USERNAME%\Desktop\Programme\Batch>set /a "Count2=1020" 
06.
 
07.
C:\Users\%USERNAME%\Desktop\Programme\Batch>for /F "delims=" %r in ("C:\Users\%USERNAME%\AppData\Local\Temp\tempren.txt") 
08.
do (call :Rename %r   & timeout /T 1   1>NUL 
09.
 set /a Count1+=1  ) 
10.
 
11.
C:\Users\%USERNAME%\Desktop\Programme\Batch>(call :Rename C:\Users\%USERNAME%\AppData\Local\Temp\tempren.txt   & timeout / 
12.
T 1   1>NUL 
13.
 set /a Count1+=1  ) 
14.
 
15.
C:\Users\%USERNAME%\Desktop\Programme\Batch>ren C:\Users\%USERNAME%\AppData\Local\Temp\tempren.txt 
16.
Syntaxfehler. 
17.
 
18.
C:\Users\%USERNAME%\Desktop\Programme\Batch>rem CLS 
19.
 
20.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo Bitte gaben sie den Pfad eines Ordners an 
21.
Bitte gaben sie den Pfad eines Ordners an 
22.
 
23.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo in dem die Datein nummeriert werden sollen. 
24.
in dem die Datein nummeriert werden sollen. 
25.
 
26.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo Pfad: C:\Test 
27.
Pfad: C:\Test 
28.
 
29.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo. 
30.
 
31.
 
32.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo. 
33.
 
34.
 
35.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo ------ 001 von 020 ------ 
36.
------ 001 von 020 ------ 
37.
 
38.
C:\Users\%USERNAME%\Desktop\Programme\Batch>echo. 
39.
 
40.
 
41.
C:\Users\%USERNAME%\Desktop\Programme\Batch>exit /b 0 
42.
 
43.
C:\Users\%USERNAME%\Desktop\Programme\Batch>pause 
44.
Drücken Sie eine beliebige Taste . . .
Edit1: Habs gelöst! Hab in der for schleife einfach: in ('type "%TEMP%\tempren.txt"') do ... verwendet.

Danke für deine hilfe.

Grüße Darkprodukt

Noch eine frage.
Das mit der falschen sortierung, würde ich gerne umgehen, aber wie?
Bitte warten ..
Mitglied: bastla
16.02.2013 um 13:38 Uhr
Hallo Darkprodukt!
Hab in der for schleife einfach: in ('type "%TEMP%\tempren.txt"') do ... verwendet.
Auch eine Möglichkeit - meinen Vorschlag mit "usebackq" hattest Du ja offensichtlich ignoriert.
Das mit der falschen sortierung, würde ich gerne umgehen, aber wie?
Wenn auch hier mein Ansatz (von ganz oben) für Dich nicht passt, habe ich leider keine weitere Idee ...

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
16.02.2013 um 15:03 Uhr
Hallo, bastla!

Ja das "usebackq" hab ich übersehen.


Da das mit den führenden Nullen weiß ich schon.
Aber das Programm soll eben auch dazu verwendet werden können.
Dateien zu Nummerieren, also deteien in einem Ordner die 1.txt; 2.txt etc. heßen,
in 001.txt; 002.txt; etc umzubenennen und genau da ist mein Problem, da die Dateien
eben Falsch nummeriert werden würden.

Grüße Darkprodukt
Bitte warten ..
Mitglied: bastla
16.02.2013 um 19:10 Uhr
Hallo Darkprodukt!

Als Workaraound könntest Du mit
dir /b/on ?.txt
alle Dateien mit einstelligen Namen, mit
dir /b/on ??.txt
alle mit ein- oder zweistelligen Namen, usw getrennt verarbeiten.

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
16.02.2013 um 20:33 Uhr
Hallo, bastla!

Super Idee, aber was mich ich mit den Dateien die z.b. Bild_1.jpg; Bild_2.jpg; etc. heißen?

Die würden ja auch Falsch benannt werden.


Grüße Darkprodukt
Bitte warten ..
Mitglied: bastla
16.02.2013 um 21:06 Uhr
Hallo Darkprodukt!

Für die genannten Beispiele wäre das dann eben
dir /b/on "Bild_?.jpg"
etc ...

Im übrigen wäre es sinnvoll, bereits bei der Entstehung der Dateien anzusetzen und dort für vernünftige Nummern zu sorgen.

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
16.02.2013 um 23:36 Uhr
Hallo, bastla!

Leider ist es nicht möglich für mich die Dateinamen bei der enstehung so festzulegen, wie ich sie gerne hätte.

Die meisten Dateien sind aus .7z; .rar; .zip entpackt und enthalten z.b. eine vielzahl an Bildern, Videos, Dokumenten, aber leider eben mit einer meist sehr schlechten benennung.

Eine aufgabe dieses Programms soll es sein die Dateinamen fernünftig, um zu Benennen.

Deswegen ist würde Bild_?.jpg nicht funktionieren, da es auch ein anderer Dateiname sein kan.


Ich breuchte etwas, was liste der Dateinamen genauso ausgibt, wie es im "neuen" explorer angezeigt wird und nicht so wie in der Konsole.

Grüße Darkprodukt
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Probleme mit Dateipfaden in for-Schleife (1)

Frage von Jonas1806 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Schleife als FOR-SCHLEIFE (2)

Frage von mp2711 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...