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

Ziel einer Verknüpfung und Erweiterung einer Datei per Batch auslesen

Frage Entwicklung Batch & Shell

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

10.03.2012, aktualisiert 12.03.2012, 7892 Aufrufe, 9 Kommentare

Hallo alle miteinander!

ich war verwundert, dass dazu keine Lösungen zu finden sind.

1. Wie kann das Ziel einer Verknüpfung ausgelesen werden? Wenn es nur über VB-Skript gehen sollte, wie könnte der ermittelte Wert in der Batch weiterverarbeitet werden? Es geht darum Dateien, die über Verknüpfungen in einem Ordner zu erreichen sind, zu verwalten (verschieben, kopieren), um sowohl Redundanz auf dem Datenträger zu vermeiden als auch ein Asynchronlauf der Dateien nicht zu vernachlässigen (Doppelgänger - neu/alt - vermeiden).

2. Wie schaft ihr die Erweiterung einer Datei auszulesen?
Lösungen wie %var:~0,-4% geht schlecht, da die Anzahl der Buchstaben aller möglichen Erweiterungstypen nicht fest definiert ist.
Das Relevante, das mir bekannt ist, wäre %~x0 für die aktuelle Datei und mit %~x1 für das übergebene Argument. Könnte es eventuell mit "|" (Pipe) oder ähnlichen Tricks klappen?

Vielen Dank für eure Tipps!
evinben
Mitglied: bastla
10.03.2012 um 20:58 Uhr
Hallo evinben!

Der Weg führt tatsächlich über VBS - etwa:
01.
@echo off & setlocal 
02.
set "Lnk=%userprofile%\Desktop\VHD.lnk" 
03.
 
04.
set "G=%temp%\GetTargetPath.vbs" 
05.
>%G% echo WScript.Echo CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0)).TargetPath 
06.
 
07.
for /f "delims=" %%i in ('cscript //nologo %G% "%Lnk%"') do set "TargetPath=%%i" & set "TargetType=%%~xi"
Grüße
bastla
Bitte warten ..
Mitglied: evinben
12.03.2012 um 10:32 Uhr
gruß bastla!

wow, das ist ja kompliziert... Ich hätte mir es leichter vorgestellt.
Es funktioniert und ich danke dir hierfür!

Und um den Namen der Verknüpfung im Bezug auf eine bestimmten Datei zu generieren, die in dem selben Ordner vorliegt, wäre es:
01.
:Name für die Verknüpfung generieren: die Bezugsdatei finden, ihre Dateierweiterung filtern und nur ihren Namen in der  Variable setzen. 
02.
for /f "delims=" %%d in ('dir  /b ^| findstr /C:"%File%"') do set LinkName=%%~nd 
Kapiert ;)

Großartig. DANKE BASTLA!!! Ich würde grene bei dir Praktikum machen.


gruß
evinben
Bitte warten ..
Mitglied: evinben
13.03.2012 um 16:39 Uhr
Hallo Bastla,

ich habe nach einem langen Rätsel festgestellt, dass das Skript die Umlauten im Zielpfad zwar schön in der Eingabeaufforderung anzeigt aber diese werden in der temporär ausgegebenen txt-Datei konvertiert. Z. B. von "C:\Probe mit Umlauten.ÄÖÜßäöü.txt" wird:
01.
C:\Probe mit Umlauten. Ž™šá„”.txt
Ich habe versucht das konvertierte Zeichne für "ü" duch "ü" zu ersetzen und es hat mit set var=%var:=ü% nicht funkioniert
Gibt es dafür eine Abhilfe?

Ich schildere mal kurz das Vorhaben/die Fragestellung konkret:
- In einem Ordner befinden sich Verknüpfungen mit Umlauten.
- Mit einer Batch-Datei soll die Zieldatei einer Verknüpfung kopiert und/oder verschoben werden. In dem Pfad zu der Zieldatei sind Umlauten vorhanden.
- Wie kann der Zielpfad in einer Variable gesetzt werden (um die Zieldateie verschieben bzw. kopieren zu können)?


Die letzte Beispielzeile von mir war doch eine schlechte Methode, da findstr im Zusammenhang mit dem Schalter /C: aber auch mit dem /X nicht mit Umlauten zurecht kommt.
Diese Zeile hier leistet dagegen Wunder:

01.
:Dateinamen einer Datei, die im aktuellen Verzeichnis sich befindet, in eine Variable setzen (Erweiterung weglassen)  
02.
for /f "delims=" %%d in ('dir /b "%File%"') do set LinkName=%%~nd
gruß
evinben


Edit: alle Umlaute werden in der txt-Datei konvertiert ausgegeben
Bitte warten ..
Mitglied: bastla
13.03.2012 um 17:27 Uhr
Hallo evinben!

Ein
chcp 1252 >nul
im Batch vorweg hast Du schon versucht?

Grüße
bastla
Bitte warten ..
Mitglied: evinben
13.03.2012 um 18:30 Uhr
ja Bastla,

bei mir steht das Alles nun als Standard in jeder neuen Bach-Datei und wenn jemandem meine Bach-Vorlage weiter hilft, gebe ich sie hier weiter:
01.
Windows Registry Editor Version 5.00 
02.
[HKEY_CLASSES_ROOT\.bat\ShellNew] 
03.
:Mit "0D0A" wird ein Zeilenumbruch erzeugt. Diese Zahlen sind nicht in rechtem sondern in linkem Bereich während der Berbeitung von REG_BINARY eizungeben. 
04.
:Folgender Eintrag wird in der Vorlage erzeugt: 
05.
06.
07.
:@echo off 
08.
:setlocal enabledelayedexpansion 
09.
:@prompt -$G 
10.
:chcp 1252 >nul 
11.
:PushD %~dp0 
12.
:echo. 
13.
14.
15.
16.
17.
:pause >nul 
18.
19.
"Data"=hex:0d,0a,0d,0a,40,65,63,68,6f,20,6f,66,66,0d,0a,3a,73,65,74,6c,6f,63,\ 
20.
  61,6c,20,65,6e,61,62,6c,65,64,65,6c,61,79,65,64,65,78,70,61,6e,73,69,6f,6e,\ 
21.
  0d,0a,40,70,72,6f,6d,70,74,20,2d,24,47,0d,0a,63,68,63,70,20,31,32,35,32,20,\ 
22.
  3e,6e,75,6c,0d,0a,3a,50,75,73,68,44,20,25,7e,64,70,30,0d,0a,65,63,68,6f,2e,\ 
23.
  0d,0a,0d,0a,0d,0a,0d,0a,0d,0a,0d,0a,70,61,75,73,65,20,3e,6e,75,6c,0d,0a
Als .reg abspeichern > ausführen und in dem Kontextmenü Neu den neuen Eintrag Windows-Batchdatei aufrufen.

Gruß
evinben
Bitte warten ..
Mitglied: evinben
14.03.2012 um 10:19 Uhr
Einen schönen Mittwoch an alle!

ich habe sehr intensiv weiter experimentiert und bin zu dum folgenden Schluss gekommen, dass mit der Variante set var=%var:ü% nur zwei Umlauten sich ersetzen lassen - Ä und Ö - und leider keine andere.

01.
:Ziel der Verknüpfung erfahren 
02.
:~~~~~~~~~~~~~~~~~~~~~~~~~ 
03.
 
04.
:@echo off 
05.
setlocal enabledelayedexpansion  
06.
setlocal 
07.
@prompt -$G 
08.
chcp 1252 >nul 
09.
 
10.
PushD %~dp0 
11.
 
12.
:Ziel der Verknüpfung erfahren, um die entsprechende Datei zu kopieren 
13.
set "LinkFile=Probe mit Umlauten.ÄÖÜäöüß.txt.lnk"  
14.
set "TempVBSkriptFile=%temp%\GetTargetPath.vbs"  
15.
>%TempVBSkriptFile% echo WScript.Echo CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0)).TargetPath  
16.
for /f "delims=" %%i in ('cscript //nologo "%TempVBSkriptFile%" "%LinkFile%"') do set File=%%~nxi& set FileDirectory=%%~dpi& set TargetPath=%%~i 
17.
set FilePath=%TargetPath% 
18.
echo Datei:		"%File%" 
19.
echo Verzeichnis:	"%FileDirectory%" 
20.
echo Pfad:		"%FilePath%" 
21.
 
22.
echo. 
23.
:Nur diese beiden Umlauten lassen sich erfolgreich ersetzen 
24.
set FilePath=%FilePath:Ž=Ä% 
25.
set FilePath=%FilePath:™=Ö% 
26.
 
27.
echo %FilePath% 
28.
 
29.
echo. 
30.
:Diese Zeichen lassen sich auf derselben Weise leider nicht ersetzen 
31.
set FilePath=%FilePath=„:ä% 
32.
set FilePath=%FilePath=:ü% 
33.
set FilePath=%FilePath=”:ö% 
34.
set FilePath=%FilePath=á:ß% 
35.
set FilePath=%FilePath=š:Ü% 
36.
 
37.
 
38.
echo %FilePath%>tmp.txt 
39.
pause >nul
Wie schafft ihr es? Gibt es eventuell andere Codepages, die ausprobiert werden sollten?
Wenn das Ersetzen der Umlauten im Batch nicht möglich wäre, gibt es hierfür alternativ eine VBS-Lösung?

Für jede Tipps/Anregungen/Vorschläge wäre ich dankbar.

bis bald
evinben
Bitte warten ..
Mitglied: bastla
14.03.2012 um 14:50 Uhr
Hallo evinben!

Und wenn Du versuchsweise in den noch nicht funktionierenden Zeilen 31 bis 35 "=" und ":" in die richtige Reihenfolge bringst?

Aber im Ernst: Was soll denn in weiterer Folgen noch mit dem Pfad passieren? Wenn er ohnehin wieder ANSI-codiert benötigt wird, kannst Du ihn ja so lassen, wie er ist ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
14.03.2012 um 16:03 Uhr
Danke Bastla,

ja das war es, danke . Nun werden alle Umlauten ersetzt.

Aber im Ernst: Was soll denn in weiterer Folgen noch mit dem Pfad passieren? Wenn er ohnehin wieder ANSI-codiert benötigt wird, kannst Du ihn ja so lassen, wie er ist ...

Das macht mir nun Stress und macht mich zugleich neugierig. Was mache ich nun wieder Falsch? In meinem Fall klappt es ohne zusätzlichen Nachbearbeitung der Umlauten definitiv nicht - schau:
01.
type "%FilePath%" 
02.
copy "%FilePath%" "%systemDrive%\Windows"
Die Antwort lautet darauf 2x: Das System kann den angegebenen Pfad nicht finden.

Danke sehr, für die Fehlerkorrektur

"Setzen, Note 6!"


Gruß
evinben
Bitte warten ..
Mitglied: evinben
14.03.2012 um 19:48 Uhr
Hallo Bastla,

nur Bescheid geben: mit CALL werden nun alle Umlaute-Zeichen ersetzt und anschließend der Pfad in eine Variable gesetzt. Ab dann laufen die Befehle wie **copy* wieder.

Also das Problem ist somit gelöst.

Vielen Dank noch mal für die intensive Unterstützung!


gruß
evinben
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...