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, 8333 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 ..
Ähnliche Inhalte
Batch & Shell
Batch zum suchen und verschieben von Verknüpfungen (12)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
gelöst Fenstertitel von anderen Tasks per batch auslesen (3)

Frage von NetMare zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Linksys wrt1200ac v2 mit dd-wrt: keine vlan-einstellungen im GUI (15)

Frage von Pixi123 zum Thema Router & Routing ...

E-Business
Wo tragt ihr eure privaten Termine ein? (13)

Frage von honeybee zum Thema E-Business ...

Netzwerkprotokolle
Leiten "dumme" Switches VLAN-Tags mit durch? (13)

Frage von coltseavers zum Thema Netzwerkprotokolle ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...