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

gelöst Ordnername zeichenweise auslesen - ein weiteres Zeichen einfügen

Mitglied: geTuemII

geTuemII (Level 3) - Jetzt verbinden

13.09.2007, aktualisiert 18.10.2012, 5706 Aufrufe, 10 Kommentare

Hallo,

ich habe keine Lust auf eine anstehende "Strafarbeit" und wollte die Arbeit lieber ein Batch erledigen lassen:

1. vierstelligen Ordnernamen zeichenweise auslesen, um an der zweiten Stelle eine Null einzufügen (xxxx --> x0xxx)
2. Verzeichnis x0xxx erzeugen
3. Originalordner xxxx in xxxx-blafasel umbenennen
4. xxxx-blafasel nach x0xxx verschieben

Die Punkte 2-4 sind ja eher unproblematisch, aber wie bekomme ich die Null an die zweite Stelle?

geTuemII
Mitglied: bastla
13.09.2007 um 18:23 Uhr
Hallo geTuemII!

Ich will ja gar nicht fragen, was Du so angestellt hast , aber eine derartige "Strafe" wirst Du ganz sicher nicht verdient haben - daher ein klein wenig Unterstützung:
01.
@echo off & setlocal 
02.
set Old=1234 
03.
set New=%Old:~0,1%0%Old:~1% 
04.
echo %New%
Den Rest schaffst Du dann schon ...

Grüße
bastla
Bitte warten ..
Mitglied: geTuemII
13.09.2007 um 19:18 Uhr
Hallo bastla,

Ich will ja gar nicht fragen, was Du so angestellt hast
ich? Garnix! .... und das diesmal ganz ernsthaft, Ehrenwort!

Den Rest schaffst Du dann schon
Dein Wort in Gottes Gehörgang - ich scheitere momentan and der Zuweisung von old:
01.
@echo off & setlocal 
02.
for /f "delims=" %%i in ('dir /b /a:d') do ( 
03.
	set "old=%%i" 
04.
	set new=%old:~0,1%0%old:~1% 
05.
	md %new% 
06.
	move  "%old%" "%new%\%old% Text-Daten")
Es ist sicher wieder gaaaanz einfach....

geTuemII
Bitte warten ..
Mitglied: Biber
13.09.2007 um 19:28 Uhr
Hmmmm, geTuemII,

ich weiß ja, dass Du Spaß verstehst und für ein Mädchen ziemlich belastbar bist... <abduck>

Also - nur als Angebot- es ginge natürlich auch mit einem Oneliner.
okay, ich habe vorher mit "mode con cols=200 lines=33" erstmal eine "line" für den Oneliner neu definiert *zugeb*

Aber wenn Deine Situation-IST so aussieht:
01.
>for /D %i in ("D:\Temp\getuemII\????") do @echo %i 
02.
D:\Temp\getuemII\1234 
03.
D:\Temp\getuemII\1777 
04.
D:\Temp\getuemII\3657 
05.
D:\Temp\getuemII\9876
---> also eine Ordnerstruktur (mit 4 Zeichen langen SubDirs) unterhalb einer beliebigen Ebene
...und Soll-Szenario danach ist:
01.
>for /r "D:\Temp\getuemII" %i in (.) do @echo %~fi 
02.
D:\temp\getuemII 
03.
D:\temp\getuemII\10234 
04.
D:\temp\getuemII\10234\1234_blafasel 
05.
D:\temp\getuemII\10777 
06.
D:\temp\getuemII\10777\1777_blafasel 
07.
D:\temp\getuemII\30657 
08.
D:\temp\getuemII\30657\3657_blafasel 
09.
D:\temp\getuemII\90876 
10.
D:\temp\getuemII\90876\9876_blafasel
....
Dann macht das diese Zeile vom CMD-Prompt* aus:
01.
for /d %i in (\temp\getuemII\????) do @set "Old=%~ni" & @for /f %j in ("%~dpi!old:~,1!0!old:~-3!") do @(md "%~dpi%~nj") & move "%~fi" "%~dpnj\%~ni_blafasel"
Aber ich würde es - wegen der Nerven - auf drei, vier Zeilen Batch auswalzen.
Dann kann frau auch der Geschäftsleitung ein beeindruckendes Ergebnis vorweisen und nich' nur eben eine Zeile.

Wofür es denn die Strafe war, wüsste ich aber auch gern... kannst Du aber auch mal einem Cappuccino erzählen..

Grüße
Biber
P.S. wg. *CMD-Prompt: bei meinem CMD-Prompt ist "EnableDelayedExpansion" immer gesetzt.
Sonst muss noch ein "Setlocal EnableDelayedExpansion & " davor.
Vor das for vor dem /d.
Davor halt. *räusper*
Bitte warten ..
Mitglied: geTuemII
13.09.2007 um 20:00 Uhr
Hallo ihr beiden,

01.
@echo off & setlocal EnableDelayedExpansion 
02.
for /f "delims=" %%i in ('dir /b /a:d') do (set "old=%%i") 
03.
 set new=%old:~0,1%0%old:~1% 
04.
 md %new% 
05.
 move  "%old%" "%new%\%old% Text-Daten"
setzt jetzt old richtig, allerdings läuft die Umbenennung natürlich nur für den lezten gefundenen Eintrag, logisch. Sobald ichz aber irgendwo eine Klammer versetze (die hinterm set ganz ans Ende) oder zwei hinzufüge (ab do komplett einklammern), geht nichts mehr...

Wie gesagt, es ist sicher ganz einfach.... nur ich bin heute wohl zu doof

geTuemII
Bitte warten ..
Mitglied: geTuemII
13.09.2007 um 20:14 Uhr
Hallo Biber,
<umguck - wo_biste_denn - kannst_wieder_rauskommen - so_gebückt_stehen_ist_in_deinem_alter_nicht_gut>

Dann kann frau auch der Geschäftsleitung ein beeindruckendes
Ergebnis vorweisen und nich' nur eben eine Zeile.
Du hast eine Geschäftsleitung, die versteht, was du tust? <staun>

Aber abgesehen davon bekomme ich auch im CMD Fehler (Syntax für Dateinamen falsch und Parameterfehler), irgendwie sollte ich wohl heimgehen...

Wofür es denn die Strafe war, wüsste ich aber auch gern...
kannst Du aber auch mal einem Cappuccino erzählen..
Immer diese leeren Versprechungen.

Sonst muss noch ein "Setlocal EnableDelayedExpansion & " davor.
Vor das for vor dem /d. Davor halt. *räusper*
<grinz> Kannste mir das bitte nochmal erklären? Büdde!
Bitte warten ..
Mitglied: bastla
13.09.2007 um 20:47 Uhr
Hallo geTuemII!

Damit Du Dich von mir nicht ganz im Stich gelassen fühlst:
01.
@echo off & setlocal 
02.
for /d %%i in (D:\temp\getuemII\????) do call :ProcessFolder "%%i" 
03.
goto :eof 
04.
 
05.
:ProcessFolder 
06.
set "Old=%~n1" 
07.
set "New=%Old:~0,1%0%Old:~1%" 
08.
md "%~dp1%New%" 
09.
move "%~f1" "%~dp1%New%\%~n1_blafasel">nul
Is zwar nicht mehr, schaut aber so aus ...

... und das "Setlocal EnableDelayedExpansion" ist damit auch vom Tisch.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
13.09.2007 um 21:24 Uhr
... und, nur der Ordnung halber: Wenn Du Biber's Oneliner in eine Batchdatei stellst (mit doppelten %%), also etwa
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /d %%i in (\temp\getuemII\????) do @set "Old=%%~ni" & @for /f %%j in ("%%~dpi!old:~,1!0!old:~-3!") do @(md "%%~dpi%%~nj") & move "%%~fi" "%%~dpnj\%%~ni_blafasel"
klappt's natürlich.
@Biber
Könnte folgende Interpretation hinkommen:
Vom Prompt funktioniert der Oneliner (auch bei mir) nicht, weil das leidige "Setlocal EnableDelayedExpansion", auch wenn es, wie beschrieben, vorweg eingegeben wird, dennoch schon "zu spät" kommt (es wird als Teil dieser einzigen Zeile betrachtet und kann sich dadurch auf den Rest der Zeile nicht mehr auswirken).

Grüße
bastla
Bitte warten ..
Mitglied: geTuemII
13.09.2007 um 21:35 Uhr
Ein call, ja klar! <vor_den_Kopf_klopf> Danke, bastla, das war die Idee. Daß in die Batches doppel% gehören, habe sogar ich schon gelernt

geTuemII
Bitte warten ..
Mitglied: bastla
13.09.2007 um 22:13 Uhr
Hallo geTuemII!

Daß in die Batches doppel% gehören, habe sogar ich schon gelernt
Auch wenn ich Dich damit enttäuschen sollte: Der Hinweis war gar nicht für Dich gedacht, sondern auch "der Ordnung halber" (ich hatte ja Biber's Code verändert).

Jedenfalls scheint es jetzt so, als hättest Du Deine Strafe abgesessen - freut mich, wenn's tatsächlich so ist.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
14.09.2007, aktualisiert 18.10.2012
Moin, ihr beiden,

okay, okay, dann will ich wenigstens für die eventuellen neueren MitleserInnen ein paar Insider-Jokes erläutern. Nur damit niemand in eine falsche Richtung läuft.

Der oben gepostete Oneliner funktioniert in der Tat bei mir, ist aber dennoch natürlich Firlefanz, Taschenspielergetrickse, etwas für langweilige betriebliche Weihnachtsfeiern.
Aus zwei Gründen:

  • ist nicht lesbar / pflegbar /wartbar / dokumentierbar und von daher absolut tabu für den Einsatz auf Nicht-Privatrechnern. Wie jeder Admin/jede Admine selbstredend weiß.
  • Für die Tipps & Tricks-Rubrik einer Tankstellen-PC-Zeitschrift darf er gerne vorgeschlagen werden. Und wer für diese Einsendung noch 20 Euro abstaubt und an Greenpeace überweist, hat meine ausdrückliche Genehmigung.
  • zweiter Grund ist: für diesen verspielten Oneliner braucht ein Bremer Durchschnittsbiber das 4fache der Zeit, die ein les-, pfleg- und wartbarer mehrzeiliger bastla-Batch (s.o.) erfordern würde. War also nur ein Gag.

Zu der Voreinstellung von "Setlocal EnableDelayedExpansion":

Ich habe es unter anderem in den Kommentaren unterhalb des Tutorials Workshop Batch for Runaways III mal gepostet:
[Zitat]
Sieht bei mir so aus:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Command Processor"

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Software\Microsoft\Command Processor
CompletionChar REG_DWORD 0x9
DefaultColor REG_DWORD 0x74
PathCompletionChar REG_DWORD 0x9
DisableUNCCheck REG_DWORD 0x1
EnableExtensions REG_DWORD 0x1
DelayedExpansion REG_DWORD 0x1

Der zweite (nicht oder kaum dokumentierte) fette Eintrag bewirkt bei mir, dass die DelayedExpansion, die verzögerte Variablenauflösung standardmäßig aktiviert ist.
Bei "Auslieferung ab Werk" ist das auf Windowsrechnern nicht so.
[/Zitat Ende]
Eine weitere -vermutlich aus berechtigter Scham- von M$ verschwiegene Möglichkeit,
das "EnableDelayedExpansion"-Verhalten am CMD-Prompt zu erzwingen ist:

Eine beliebigen Batch zu schreiben
  • mit der Anweisung "Setlocal EnableDelayedExpansion" in der ersten Zeile
  • und diesen Batch danach mit irgendeiner ungültigen Syntax ("for /f %%i in grütze do quark") gegen die Wand zu fahren.
  • die Einstellung "EnableDelayedExpansion" bleibt in diesem Fall am CMD-Prompt erhalten.
  • Ich bitte, daraus keine voreiligen Schlüsse bezüglich der Quälität von M$-Produkten zu ziehen.
  • Auch dieser Tipp könnte Greenpeace 10 Euro bringen.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Ordnernamen mit teilweise unbekannten Zeichen finden

Frage von CADSupport007Batch & Shell3 Kommentare

Hallo liebe Usergemeinde, Ich (Level Anfänger) möchte gerne per Batch Ordnernamen mit teilweise unbekannten Zeichen finden und diesen Namen ...

Batch & Shell

Powershell Ordnername auslesen und verwenden

gelöst Frage von zamsi7Batch & Shell3 Kommentare

Hallo an alle, hoffe ich bin hier richtig und jemand kann mir helfen :) Ich möchte eine cert Datei ...

Batch & Shell

Einfügen von Zeichen mit Batch bzw. Powershell

gelöst Frage von adm2015Batch & Shell5 Kommentare

Hallo zusammen, ich hab ein kleines Problem und müsste dies irgendwie mit einem Script lösen, da ich keine 500 ...

Batch & Shell

Via Batch Zeichen in Textzeilen einfügen

gelöst Frage von LuceDeCielloBatch & Shell3 Kommentare

Hallo, ich habe die Lösung für mein Problem schon fast gefunden. Leider verstehe ich die Positionsangaben in dem Skript ...

Neue Wissensbeiträge
Microsoft

Neuigkeiten zu Server und Office 365 was läuft mit was und was nicht

Tipp von AlFalcone vor 7 StundenMicrosoft

Server Betriebssysteme auf dem die verschiedenen Offices nicht supported sind: • Office 365 ist und wird nicht supported auf Windows ...

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 8 StundenSpeicherkarten1 Kommentar

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 10 StundenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 1 TagHardware1 Kommentar

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows 10
Sysprep Fehler im Log kann nicht starten
Frage von grillinator95Windows 1022 Kommentare

Hallo, kann leider SYSPREP nicht mehr starten, Win10 64bit. Logfile sagt folgendes: 2018-10-17 13:44:56, Info SYSPRP 2018-10-17 13:44:56, Info ...

Sicherheitsgrundlagen
EuGH-Urteil - Internetanschluss für die ganze Familie - Filesharer haften trotzdem
Frage von StefanKittelSicherheitsgrundlagen17 Kommentare

Hallo, In diesem Artikel geht es darum, dass Jemand aus der Familie ein Hörbuch illegal hochgeladen hat. Der Vater ...

Apple
MacBook Pro 2018 mit 8 GB oder 16 GB
Frage von SysAdm81Apple14 Kommentare

Hallo zusammen, ich steh vor der Überlegung mir ein MacBook Pro 13 (2018) zu kaufen. Bzgl. SSD habe ich ...

Outlook & Mail
Outlook schiebt Mails aus Posteingang sofort in den Papierkorb
Frage von hermesOutlook & Mail13 Kommentare

Hallo Outlook Fachleute, wir haben hier das Problem, dass Outlook 2010 alle ankommenden Mails seit zwei Tagen einfach in ...