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

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

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

10.03.2012, aktualisiert 12.03.2012, 8626 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
Verknüpfung mittels Batch erstellen - Punkt in Ziel, Ziel ist ein Ordner
gelöst Frage von moses-southBatch & Shell5 Kommentare

Hallo Zusammen Ich habe folgendes Problem: Bei uns auf dem Fileserver wird für jedes Projekt, ein eigener Ordner mit ...

Windows Server
Blinde Programmicons auf Verknüpfungen mit Zielen in Netzwerkpfaden
Frage von departure69Windows Server6 Kommentare

Hallo. Seit dem W2K12-Server (ohne "R2") fällt mir auf, daß manche Programmverknüpfungen, die zu Zielen in Netzwerkpfaden führen, nur ...

Batch & Shell
BATCH ini Datei Datei auslesen
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Batch & Shell
Batch File zum Auslesen einer Datei
gelöst Frage von Marcel1989Batch & Shell9 Kommentare

Hallo, Ich scheibe momentan ein Anmeldescript als batch mit dem Aufruf von VBS dateien. Hierfür haben wir bereits gruppen ...

Neue Wissensbeiträge
CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 3 MinutenCPU, RAM, Mainboards

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 13 StundenRouter & Routing3 Kommentare

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 20 StundenDatenschutz1 Kommentar

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 1 TagMicrosoft1 Kommentar

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

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

Microsoft
Nach Windows Update erkennt mein Notebook den zweiten Bildschirm nicht mehr
Frage von jensgebkenMicrosoft8 Kommentare

Hallo Gemeinschaft, Nach einem Windows Update, erkennt mein Notebook den zweiten Bildschirm nicht mehr – was kann man da ...