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

Variable erzeugen mit for

Mitglied: christiank

christiank (Level 1) - Jetzt verbinden

12.01.2008, aktualisiert 19:52 Uhr, 3352 Aufrufe, 12 Kommentare

Wieso funktioniert das nicht?

01.
for %%d in ( 
02.
	"%ALLUSERSPROFILE%" 
03.
	"%USERPROFILE%" 
04.
	"C:\Documents and Settings\LocalService" 
05.
	"C:\Documents and Settings\NetworkService" 
06.
	"D:\System Volume Information" 
07.
	"D:\Recycler" 
08.
	"%ProgramFiles%" 
09.
	"%SystemRoot%" 
10.
) do set ExcludeDirs=%ExcludeDirs% %%d 
11.
echo %ExcludeDirs%
Ich bekomme als ausgabe immer nur:
01.
 "C:\WINDOWS"
Mitglied: TuXHunt3R
12.01.2008 um 16:34 Uhr
Weil die Variable "ExcludeDirs" immer überschrieben und der aktuelle Inhalt hineingeschrieben wird. Wenn du so etwas machen willst, brauchst du ein eindimensionales Array (1 Spalte, x Zeilen). Da es bei Batch aber keine Arrays gibt, wird das hier nicht gehen.

Was genau willst du denn machen? Kannst du mal das gesamte Script posten?
Bitte warten ..
Mitglied: christiank
12.01.2008 um 16:52 Uhr
Hatte es zuerst so:
01.
set ExcludeDirs="%ALLUSERSPROFILE%" 
02.
set ExcludeDirs=%ExcludeDirs% "%USERPROFILE%" 
03.
set ExcludeDirs=%ExcludeDirs% "C:\Documents and Settings\LocalService" 
04.
set ExcludeDirs=%ExcludeDirs% "C:\Documents and Settings\NetworkService" 
05.
set ExcludeDirs=%ExcludeDirs% "C:\System Volume Information" 
06.
set ExcludeDirs=%ExcludeDirs% "C:\Recycler" 
07.
set ExcludeDirs=%ExcludeDirs% "%ProgramFiles%" 
08.
set ExcludeDirs=%ExcludeDirs% "%SystemRoot%"
Ergebnis:
01.
"C:\Dokumente und Einstellungen\All Users" "C:\Dokumente und Einstellungen\afu" 
02.
"C:\Documents and Settings\LocalService" "C:\Documents and Settings\NetworkServi 
03.
ce" "C:\System Volume Information" "C:\Recycler" "C:\Programme" "C:\WINDOWS"
Nachdem ich das aber nicht besonders "hübsch" zum erweitern finde, dachte ich mir, man könnte es via for lösen...
Ziel ist es, eine Variable zu haben in der jeder Wert in der Schleife auftaucht.
Bitte warten ..
Mitglied: Dani
12.01.2008 um 17:08 Uhr
Hallo Christian,
probier es mal so:
01.
do set ExcludeDirs="%ExcludeDirs% %%d"
oder
do set 2ExcludeDirs=%ExcludeDirs% %%d"
</code>

Grüße
Dani
Bitte warten ..
Mitglied: christiank
12.01.2008 um 17:17 Uhr
Weder
01.
do set ExcludeDirs="%ExcludeDirs% %%d"
noch
01.
do set "ExcludeDirs=%ExcludeDirs% %%d"
funktioniert
Bitte warten ..
Mitglied: bastla
12.01.2008 um 17:21 Uhr
Hallo christiank und willkommen im Forum!

Was Du vorhast, lässt sich so lösen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
for %%d in ( 
03.
	"%ALLUSERSPROFILE%" 
04.
	"%USERPROFILE%" 
05.
	"C:\Documents and Settings\LocalService" 
06.
	"C:\Documents and Settings\NetworkService" 
07.
	"D:\System Volume Information" 
08.
	"D:\Recycler" 
09.
	"%ProgramFiles%" 
10.
	"%SystemRoot%" 
11.
) do set ExcludeDirs=!ExcludeDirs! %%d 
12.
echo %ExcludeDirs%
Voraussetzung ist dabei nur, dass keines der angeführten Verzeichnisse ein "!" im Namen hat, da dieses einfach wegfallen würde.

Zur Vermeidung dieses Problems käme als Alternativvariante in Frage:
01.
@echo off & setlocal 
02.
for %%d in ( 
03.
	"%ALLUSERSPROFILE%" 
04.
	"%USERPROFILE%" 
05.
	"C:\Documents and Settings\LocalService" 
06.
	"C:\Documents and Settings\NetworkService" 
07.
	"D:\System Volume Information" 
08.
	"D:\Recycler" 
09.
	"%ProgramFiles%" 
10.
	"%SystemRoot%" 
11.
) do call :ProcessDir "%%~d" 
12.
echo %ExcludeDirs% 
13.
goto :eof 
14.
 
15.
:ProcessDir 
16.
set ExcludeDirs=%ExcludeDirs% %1 
17.
goto :eof
@TuXHunt3R
Die Variable %ExcludeDirs% soll ja bei jedem Durchlauf überschrieben werden, und zwar mit dem bisherigen Wert und zusätzlich (nach einem Leerzeichen) dem entsprechenden Verzeichnispfad.

Funktionieren kann das aber nur, wenn in jedem Schleifendurchlauf der Wert der Variablen %ExcludeDirs% neu eingelesen wird. Genau dies wird durch die "verzögerte Variablenauflösung" ("delayedexpansion") ermöglicht. Ohne "delayedexpansion" wird nur einmal, am Beginn der Schleife, der Wert für %ExcludeDirs% ermittelt, und der ist zu diesem Zeitpunkt noch nicht vorhanden ...

Testen kannst Du das, indem Du einfach vor der Schleife bereits eine Wertzuweisung vornimmst:
01.
set ExcludeDirs=TestVerzeichnis 
02.
for ...
In diesem Fall wäre das Endergebnis:
01.
TestVerzeichnis "C:\Windows"
Grüße
bastla

[Edit] ~ in der Zeile ) do call :ProcessDir "%%~d" ergänzt. [/Edit]
[Edit2] enabledelayedexpansion entfernt. [/Edit2]
Bitte warten ..
Mitglied: christiank
12.01.2008 um 17:42 Uhr
Schon mal gar nicht schlecht, nur leider noch ein problem. Ich habe wirklich verzeichnisse mit einem ! und somit muß ich deinen zweiten vorschlag verwenden, jedoch hat der nen problem, aber sie selbst:
01.
@echo off & setlocal enabledelayedexpansion 
02.
for %%d in ( 
03.
	"%ALLUSERSPROFILE%" 
04.
	"%USERPROFILE%" 
05.
	"C:\Documents and Settings\LocalService" 
06.
	"C:\Documents and Settings\NetworkService" 
07.
	"D:\System Volume Information" 
08.
	"D:\Recycler" 
09.
	"%ProgramFiles%" 
10.
	"%SystemRoot%" 
11.
	"C:\Test!!!" 
12.
) do call :ProcessDir "%%d" 
13.
echo %ExcludeDirs% 
14.
goto :eof 
15.
 
16.
:ProcessDir 
17.
set ExcludeDirs=%ExcludeDirs% %1 
18.
goto :eof
Ausgabe:
01.
 ""C:\Dokumente ""C:\Dokumente ""C:\Documents ""C:\Documents ""D:\System ""D:\Re 
02.
cycler"" ""C:\Programme"" ""C:\WINDOWS"" ""C:\Test""
Dabei hätte ich gern das da stehen:
01.
"C:\Dokumente und Einstellungen\All Users" "C:\Dokumente und Einstellungen\afu" 
02.
"C:\Documents and Settings\LocalService" "C:\Documents and Settings\NetworkServi 
03.
ce" "C:\System Volume Information" "C:\Recycler" "C:\Programme" "C:\WINDOWS" "C: 
04.
\Test!!!"
Was mir auch noch auffällt, dass die ! auch nicht dabei sind und überall zwei " vorhanden sind.
Bitte warten ..
Mitglied: bastla
12.01.2008 um 17:47 Uhr
Hallo christiank!

Sorry, war vorhin etwas unkonzentriert ...

Versuch mal die editierte Fassung.

Grüße
bastla
Bitte warten ..
Mitglied: christiank
12.01.2008 um 17:52 Uhr
Hossa, es klappt.
Da sag ich doch mal danke
Schönen abend noch.
Noch ne Idee wie man der erste Leerzeichen entfernen könnte?
Bitte warten ..
Mitglied: bastla
12.01.2008 um 18:01 Uhr
Hallo christiank!

Noch ne Idee wie man der erste Leerzeichen entfernen könnte?
An sich sollte es bei einer ev Weiterverarbeitung per "for" ja nicht stören, aber schöner ist's sicher ohne:
01.
:ProcessDir 
02.
if defined ExcludeDirs (set ExcludeDirs=%ExcludeDirs% %1) else set ExcludeDirs=%1
Grüße
bastla
Bitte warten ..
Mitglied: miniversum
12.01.2008 um 18:32 Uhr
Ich will ja nicht klug###risch sein aber entspricht beim
) do call :ProcessDir "%%~d"
das "%%~d" nicht einem %%d?

miniversum
Bitte warten ..
Mitglied: bastla
12.01.2008 um 18:35 Uhr
@miniversum

Soferne konsequent in der ersten Schleife jedes Verzeichnis unter Anführungszeichen gesetzt wird, ja - aber schadet ja nicht, auf Nummer sicher zu gehen, und so weiß ich, woran ich bin ...

Grüße
bastla
Bitte warten ..
Mitglied: christiank
12.01.2008 um 19:52 Uhr
Perfekt. Was jedes weitere wort wäre zu viel.
Schönen abend und Danke.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Variable erzeugen mit Leerzeichen und Klammern
gelöst Frage von hipfzwirgelBatch & Shell11 Kommentare

Hallo an Alle, ich habe eine lösbare Aufgabe und finde die richtige Schreibweise nicht. Ich muss eine Variable in ...

PHP
Aus Arrays neue Arrays erzeugen!
gelöst Frage von FunkerVogtPHP8 Kommentare

Hallo Gemeinde, ich hoffe Ihr könnt mir bei meiner Problematik helfen und meinen kleinen gordischen Knoten im Kopf lösen. ...

Microsoft Office
Mit Excel einen Termin in Outlook erzeugen
gelöst Frage von Armin-KMicrosoft Office13 Kommentare

Liebes Forum, leider finde ich trotz zahlreicher vielversprechender Ansätze hier im Forum keine funktionierende Lösung. Folgende Aufgabenstellung: Ich möchte ...

LAN, WAN, Wireless
Frage zum Erzeugen eines portbasiertem VLAN
Frage von presto-18LAN, WAN, Wireless7 Kommentare

Hallo, ich habe ein Class-C Netz 192.168.178.0/24. Der Router hat die IP 192.168.178.1 und ist ein stinknormaler Router von ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 4 StundenRouter & Routing1 Kommentar

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 11 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 15 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

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 ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...