Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

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

Mitglied: Darkprodukt

Darkprodukt (Level 1) - Jetzt verbinden

15.02.2013, aktualisiert 14:28 Uhr, 1946 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 ..
Ähnliche Inhalte
Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell
Geschachtelte For Schleife funktioniert nur im ersten Durchlauf
gelöst Frage von seb1212Batch & Shell1 Kommentar

Guten Morgen, vielleicht kann mir einer von euch sagen warum mein Script nach dem ersten Durchlauf nicht mehr an ...

Batch & Shell
Batch - Hilfe bei FOR-Schleife
gelöst Frage von makroll10Batch & Shell8 Kommentare

Hallo, aus einer Access-Datenbank heraus rufe ich per VBA den u.a. Batch mit den Parametern: Reports!UB_System!Pfad ("C:\Users\User\Documents\Polar\") und Reports!UB_Polar!hrmexport1 ...

Batch & Shell
Batch Variablen in for-Schleife
gelöst Frage von Dacki1107Batch & Shell2 Kommentare

Hallo Liebe Administratoren Ich kämpfe mit einem kleinen Problemchen und hoffe das Ihr mir helfen könnt. Ich versuche eine ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...