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 Schleife mit Variable setzen und Wert kürzen

Frage Entwicklung Batch & Shell

Mitglied: presidente

presidente (Level 1) - Jetzt verbinden

19.03.2013 um 09:28 Uhr, 2069 Aufrufe, 5 Kommentare

Hallo, ich bin neu hier und hoffe ich bin im richtigen Forum gelandet.


Muss eine Ordnerstruktur auslesen und die Dateinamen für ein SQL-Skript kürzen, dieses wird dann aufgerufen
und dort wird die metaid verwendet.



Vorhanden sind z.B. solche Dateien:

00001999_00001957.data
00001999_00001958.data
00001999_00001959.data
...

Immer in der gleichen Länge


Die metaid soll jeweils so gesetzt werden:

metaid=

00001957
00001958
00001959
...

Die Routine funktioniert leider nicht so, ist die Syntax falsch ? Mit Sub-Routinen (call :sub1) kann ich nicht arbeiten, weil vorher schon
eine for Schleife läuft und somit funktioniert :EOF nicht oder gibt evtl :EOF1 ???

for /F "delims=" %%b in ('dir /b d:\Files\00001000\*.data') do set metaid=%%b:~9,8%

:~9,8%

ab der 9. Stelle anfangen und nur 8 Stellen nehmen.

Hat jemand eine Idee ?



Veilen Dank

Stefan
Mitglied: colinardo
19.03.2013 um 09:50 Uhr
Stichwort: delayed expansion
01.
setlocal ENABLEDELAYEDEXPANSION 
02.
for /F "delims=" %%b in ('dir /b d:\Files\00001000\*.data') do ( 
03.
   set metaid=%%b 
04.
   set metaid=!metaid:~9,8! 
05.
)
Grüße Uwe
Bitte warten ..
Mitglied: presidente
19.03.2013 um 10:12 Uhr
Vielen Dank Uwe,
funkltioniert soweit. Wie kann ich nun die gesetzten Werte wieder in eine Datei schreiben (c:\kurze_namen.txt), damit ich das sql-script aufrufen kann, denn das rufe ich dann so auf:

@for /F %%c in (c:\kurze_namen.txt) do call %pfad%\SQL\SQL-Command.cmd %%c

so klappt es jedenfalls nicht:

setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%b in ('dir /b %suchpfad%\%ordner%\*.data') do (
set dateiname=%%b
set dateiname=!dateiname:~9,8!
)|echo %dateiname% >> c:\kurze_namen.txt

Echo läuft immer ins leere

was bewirkt eigentlich setlocal ENABLEDELAYEDEXPANSION ??

Vielen Dank
Bitte warten ..
Mitglied: colinardo
19.03.2013, aktualisiert um 10:20 Uhr
ENABLEDELAYEDEXPANSION bewirkt die verzögerte Auflösung von Variablen. Um dies zu nutzen musst du innerhalb der FOR-Schleife anstatt von %VARIABLE% --> !VARIABLE! schreiben, also anstatt Prozentzeichen, Ausrufezeichen verwenden:

01.
setlocal ENABLEDELAYEDEXPANSION 
02.
for /F "delims=" %%b in ('dir /b %suchpfad%\%ordner%\*.data') do ( 
03.
set dateiname=%%b 
04.
set dateiname=!dateiname:~9,8! 
05.
echo !dateiname! >>c:\kurze_namen.txt 
06.
)
Bitte warten ..
Mitglied: presidente
19.03.2013 um 10:34 Uhr
Hallo Colinardo,

vielen Dank für die schnelle Hilfe, funktioniert perfekt.

Für was steht eingentlich setlocal ENABLEDELAYEDEXPANSION , was bewirkt das genau ?

Danke
Bitte warten ..
Mitglied: colinardo
19.03.2013, aktualisiert um 10:38 Uhr
Zitat von presidente:
Für was steht eingentlich setlocal ENABLEDELAYEDEXPANSION , was bewirkt das genau ?

SETLOCAL:
Begins localization of environment changes in a batch file.  Environment 
changes made after SETLOCAL has been issued are local to the batch file.
ENABLEDELAYEDEXPANSION /DISABLEDELAYEDEXPANSION:
SETLOCAL batch command now accepts optional arguments: 
        ENABLEEXTENSIONS / DISABLEEXTENSIONS 
            enable or disable command processor extensions.  See 
            CMD /? for details. 
        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION 
            enable or disable delayed environment variable 
            expansion.  See SET /? for details.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Teil eines Strings als Variable setzen (2)

Frage von tHe-jAy zum Thema Batch & Shell ...

PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

Batch & Shell
Variable setzen können während timeout (3)

Frage von DontFlameMeITryMyBest zum Thema Batch & Shell ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Virtualisierung
Von ESXi migrieren auf HyperV (SBS11) (23)

Frage von PixL86 zum Thema Virtualisierung ...

Netzwerke
gelöst Standartgateway für Clients (21)

Frage von itsk-robert zum Thema Netzwerke ...

Windows Server
Server-Ersteinrichtung für Dummies (20)

Frage von Olf1980 zum Thema Windows Server ...

Firewall
Welche Firewall ? (18)

Frage von Cyberurmel zum Thema Firewall ...