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

Übergabe von Variabeln die Prozentzeichen enthalten per call

Frage Entwicklung Batch & Shell

Mitglied: miniversum

miniversum (Level 3) - Jetzt verbinden

04.05.2008, aktualisiert 16:53 Uhr, 7232 Aufrufe, 2 Kommentare

Hallo
Ich habe eine Batch inder ich unter anderm in einer For-Schleife Dateinamen aus einer Datei auslese die dann, nach weiteren Aktionen vorher, kopiert werden sollen.

Daher übergebe ich diese Dateinamen jeweils per Call einer Unterfunktion inder das alles gemacht wird und am ende eben auch die Kopieraktion.

Leider können in den Dateinamen alle möglichen Zeichen vorkommen, also auch ! (weshalb ich nicht mit delayedexpansion arbeiten kann) und eben auch %. Und genau dort liegt das Problem.
Übergebe ich per call die einzelnen Dateinamen werden bei denen die ein % enthalten die Prozentzeichen einfach entfernt. Dadurch geht am Ende die Kopieraktion schief weil die Datei (die ja nun ohne % zum Kopieren genommen werden soll, nicht gefunden werden kann.

Hier mal zur besseren Anschauung ein kleines Beispiel was ich meine.
@echo off
FOR /F "delims=" %%i in (Datei.txt) do (
echo Vorher: %%i
call:machwas "%%i"
)
goto:eof

:machwas
echo Nachher: %~1
goto:eof

In Datei.txt stehen die Datienamen einfach untereinander:
C:\Verzeichnis\erste Datei.txt
d:\anderes Verzeichnis\andere% Datei.txt
c:\noch ein Verzeichnis\und noch ne Datei.txt

Würde ich die Beschriebene Batchdatei ausführen würde allerdings sowas bei rauskommen:
Vorher: C:\Verzeichnis\erste Datei.txt
Nachher: C:\Verzeichnis\erste Datei.txt
Vorher: d:\anderes Verzeichnis\andere% Datei.txt
Nachher: d:\anderes Verzeichnis\andere Datei.txt
Vorher: c:\noch ein Verzeichnis\und noch ne Datei.txt
Nachher: c:\noch ein Verzeichnis\und noch ne Datei.txt
Wie man sehen kann wird die zweite Datei "andere% Datei.txt" nicht richtig übergeben.
Was kann ich da tun?
Ich hab schon versucht per set befehl das % durch ein ^% zu ersetzen aber das haut nicht wirklich hin wieichs versucht habe.
Auch eine Übergabe als
call:machwas "%%~si"
also in 8.3 Form nützt mir nichts, weil ich den ganzen Namen vorher in dieser "Machwas" benötige.

Ich bin für alle hilfreichen Tips dankbar.
Mitglied: bastla
04.05.2008 um 13:17 Uhr
Hallo miniversum!

Ich hab schon versucht per set befehl das % durch ein ^% zu ersetzen
Ersetze % durch %% ...

[Edit] ... bzw noch einfacher:
01.
@echo off 
02.
FOR /F "delims=" %%i in (Datei.txt) do ( 
03.
    set "Dat=%%i" 
04.
    echo Vorher  : %%i 
05.
    call:machwas "%%i" 
06.
07.
goto:eof 
08.
 
09.
:machwas 
10.
echo Nachher : %~1 
11.
echo Variable: %Dat% 
12.
echo\ 
13.
goto:eof
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
04.05.2008 um 16:53 Uhr
Habs jetzt wie in dem Edit gemacht.

War irgentwie auf die Übergabe versteift... Jetzt gehts wie gewollt.
Danke
Bitte warten ..
Neuester Wissensbeitrag
Router & Routing

192.168er Adresse im öffentlichen Netz

(2)

Erfahrungsbericht von visco-c zum Thema Router & Routing ...

Ähnliche Inhalte
TK-Netze & Geräte
gelöst Nummernsignalisierung bei Rufumleitung (Cisco Call Manager) (2)

Frage von TripleDouble zum Thema TK-Netze & Geräte ...

Multimedia
gelöst PDF: Alle Seiten entfernen, welche nicht definierten String enthalten (9)

Frage von MegaGiga zum Thema Multimedia ...

Voice over IP
Fax over IP Einrichtung Gateway Call Manager (1)

Frage von mellon zum Thema Voice over IP ...

Heiß diskutierte Inhalte
Zusammenarbeit
Als Administrator im Großraumbüro (29)

Frage von Dopamin85 zum Thema Zusammenarbeit ...

Exchange Server
Test-ActiveSyncConnectivity Error nach neuem Zertifikat (22)

Frage von Driphex zum Thema Exchange Server ...

Hyper-V
HYPER V und USB (16)

Frage von Hendrik2586 zum Thema Hyper-V ...

SAN, NAS, DAS
Backupserver für KMU (14)

Frage von Leo-le zum Thema SAN, NAS, DAS ...