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

For for If Kombination

Frage Entwicklung Batch & Shell

Mitglied: imsvoigt

imsvoigt (Level 1) - Jetzt verbinden

04.03.2009, aktualisiert 06.03.2009, 3021 Aufrufe, 2 Kommentare

Hallo an alle,
Es ist nicht die feine Art mit fragen in ein Forum einzutreten doch ich komme gerade nicht weiter.

Hallo an alle,
Es ist nicht die feine Art mit fragen in ein Forum einzutreten doch ich komme gerade nicht weiter.


Ich habe einen Ordner mit Dateien die ich umbenennen möchte. Der zu verwendende Name steht in der jeweiligen datei.
der Name steht immer in der 10 Zeile ab dem 12 Zeichen bis zum ende der Zeile.
Ich lese momentan die Datei in eine Variable (ist aber gefährlich da die anzahl der gesamtzeichen bis Zeile 10 variiert.)
Besser ist denke ich die ganze Zeile einzulesen und dann die ersten Stellen abzuschneiden. (leider keine Ahnung wie)

2. Nun muss darauf geachtet werden das wenn die Datei bereits besteht eine .1 .. .2. .3 usw an Beispiel.txt angehangen wird --> beispiel.txt.1 bis viele
das hab ich mit goto Befehlen gemacht. Geht auch soweit. (wenn das besser geht dann auch gern anders)

Nun nach längern Erklärungen von Dingen die euch sowiso viel klarer sind als mir die eigentliche Frage.
Die bat läuft genauso wie sie soll, nur leider nur einmal. Die 1. for schleife scheint zu vergessen das sie noch nicht fertig ist und geht zum ende durch.
Kann das an dem Goto in der schleife liegen?
Ich sitze schon 2 Tage an der geschichte und bin gespannt was ihr sagt.

Viele Grüße
imsvoigt

01.
		 
02.
@echo off & setlocal enabledelayedexpansion  
03.
 
04.
set version=1 
05.
pushd   
06.
 
07.
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (  
08.
 
09.
    set /p Zeile=<"%%i"  
10.
    set "Wert=!Zeile:~635,35!  
11.
	 
12.
	set tempor=%%i 
13.
	echo %%i 
14.
	goto versioncheck 
15.
   :naechste 
16.
   echo copy %%i !Wert!>> copy_me.bat 
17.
   copy %tempor% %neu%.%version% 
18.
   set version=1 
19.
)  
20.
popd 
21.
goto :eof 
22.
 
23.
 
24.
:weiter 
25.
	goto versioncheck 
26.
	 
27.
	 
28.
:versioncheck 
29.
set neu=!wert! 
30.
set neu=%neu: =% 
31.
echo %neu%.%version% 
32.
if exist %neu%.%version%  (set /a version+=1 
33.
	 
34.
		echo weiter 
35.
goto weiter 
36.
37.
goto OK 
38.
 
39.
:OK 
40.
echo ende 
41.
 
42.
echo die Datei braucht die Version %version% 
43.
 
44.
goto naechste
Mitglied: bastla
05.03.2009 um 01:38 Uhr
Hallo imsvoigt und willkommen im Forum!

Ein wenig wenig konkret ist Deine Beschreibung schon ...
... aber versuchen werde ich's trotzdem ...

Zunächst zu Deinem Code: Wenn Du das "goto versioncheck" durch ein "call versioncheck" ersetzt, sollte mehr als ein Durchlauf möglich sein.
Soweit ich das Ganze verstanden (bzw nachvollzogen) habe, wäre mein Ansatz etwa:
01.
@echo off & setlocal 
02.
 
03.
for /f "delims=" %%i in ('dir /b /a-d *.txt') do call :ProcessFile "%%i" 
04.
goto :eof 
05.
 
06.
:ProcessFile 
07.
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "10:"') do set "Zeile=%%b" 
08.
set "Wert=%Zeile:~11% 
09.
set "Neu=%Wert: =%" 
10.
set /a Version=1 
11.
:Loop 
12.
if not exist %Neu%.%Version% goto :DoIt 
13.
set /a Version+=1 
14.
goto :Loop 
15.
 
16.
:DoIt 
17.
echo die Datei braucht die Version %Version% 
18.
echo copy %1 %Wert%>>copy_me.bat 
19.
copy %1 %Neu%.%Version% 
20.
goto :eof
Den Sinn des Eintrages in die "copy_me.bat" kann ich allerdings gar nicht erkennen, und warum ein "copy" und kein "rename" stattfinden soll, ist mir auch nicht klar. Auch die Frage, wozu "pushd" und "popd" hier dienen sollten, konnte ich mir nicht beantworten.

Grüße
bastla

[Edit] Wenn
set /p Zeile=<"%%i"
bei Dir funktioniert hat, enthält die Datei keine Windows-Zeilenschaltungen (CR/LF) - dann wird mein Ansatz, die Zeile 10 auszulesen, wohl nicht klappen ...
[/Edit]
Bitte warten ..
Mitglied: imsvoigt
05.03.2009 um 10:41 Uhr
Hallo bastla,

Danke für deine Hilfe. Du hast trotz meiner schwammigen beschreibung genau das geschaft was ich noch brauchte.
Die vielen sinnlosen Bausteine haben sich so im probieren angesammelt. ... naja . Ich habe nun das ganze soweit bereinigt und den "\" am ende der Variabe noch entfernt.
Die Routine koppiert nun munter alle Dateien mit dem Namen aus der Zeile und achtet auf die punktversion.

Hier nochmal der Code fürs archiv.
Danke und viele Grüße
imsvoigt

01.
@echo off & setlocal 
02.
 
03.
for /f "delims=" %%i in ('dir /b /a-d *.txt') do call :ProcessFile "%%i" 
04.
goto :eof 
05.
 
06.
:ProcessFile 
07.
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "10:"') do set "Zeile=%%b" 
08.
set "Wert=%Zeile:~11% 
09.
set "Wert=%Wert: =%" 
10.
set "Wert=%Wert:\=%" 
11.
set /a Version=1 
12.
:Loop 
13.
if not exist %Wert%.%Version% goto :DoIt 
14.
set /a Version+=1 
15.
goto :Loop 
16.
 
17.
:DoIt 
18.
copy %1 %Wert%.%Version% 
19.
goto :eof
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...