batch-Datei (windows cmd.exe -) test, ob ein Verzeichnis wird ein link (symlink)
Erfuhr ich erst jetzt, dass dies ist ein Weg, um zu testen, in einer batch-Datei, wenn eine Datei ist ein link:
dir %filename% | find "<SYMLINK>" && (
do stuff
)
Wie mache ich einen ähnlichen trick, zu testen, ob ein Verzeichnis ein symlink. Es funktioniert nicht nur austauschen <SYMLINK>
mit <SYMLINKD>
, weil dir %directoryname%
listet den Inhalt des Verzeichnisses, nicht das Verzeichnis selbst.
Wie es scheint, ich brauche eine Art zu Fragen, dir zu erzählen, von dem Verzeichnis in der Weise, dass Sie würde, wenn ich fragte, in das übergeordnete Verzeichnis. (Wie ls -d
in unix).
Oder andere Art und Weise testen, ob ein Verzeichnis ein symlink?
Dank!
InformationsquelleAutor GreenAsJade | 2013-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Allgemeinen code:
herausfinden, wenn der aktuelle Ordner ist ein symlink:
herausfinden, wenn der übergeordnete Ordner ist ein symlink:
Dies funktioniert nur mit englischen Windows. Aus irgendeinem Grund MS liebt es, zu lokalisieren, command-line-strings... Der fix ist einfach nicht mit
find
(keine Notwendigkeit, der errorlevel ist genug).Ich mache immer meine Antworten hier für eine bestimmte Frage, die von einem bestimmten Benutzer. Eine batch-Datei/cmd-Zeile ist nie die Lösung für alle ähnlich wie Fragen. Außerdem, dies ist kein Windows-spezifisches Problem, Sie können lokalisieren Linux.
Schön... wie zu erkennen, wenn einer der Ordner im Pfad ein symbolischer Link... nicht nur den unmittelbar übergeordneten... aber Vorfahren Ordner ???
InformationsquelleAutor Endoro
Sie haben drei Methoden
Lösung 1: fsutil reparsepoint
Verwenden symlink/Kreuzung mit
fsutil reparsepoint query
und überprüfen%errorlevel%
für den Erfolg, wie dieser:Dies funktioniert, weil die
fsutil reparsepoint query
kann nicht alles auf standard-Verzeichnis und wirft einen Fehler. Aber, die Erlaubnis, Fehler bewirkt, dass%errorlevel%=1
zu!Lösung 2: dir + finden
Liste mit links zu übergeordneten Verzeichnis mit
dir
-, filter-Ausgang mitfind
und überprüfen%errorlevel%
für den Erfolg, wie dieser:Lösung 3: für (die besten)
Get Attribute des Verzeichnis mit
for
und überprüfen Sie die Letzte aus, da diese zeigen links. Ich glaube, das ist klüger und die beste Lösung.FYI: Diese Lösung ist nicht davon abhängig
%errorlevel%
, so können Sie prüfen "gültig " Fehler" auch!Quellen
fsutil reparsepoint query
war toll, vielen Dank!In Bezug auf Lösung 3: es ist eigentlich nicht der Letzte, sondern der 9. Charakter -
%attribs:~8,1%
. Elf Zeichen, die zurückgegeben werden, in Summe auf Windows 8.1.InformationsquelleAutor andras.tim
Eigentlich DIR funktioniert gut, wenn Sie hängen ein Sternchen nach dem Dateinamen, also:
GreenAsJade rief meine Aufmerksamkeit auf diese Lösung scheitern, wenn es ist ein weiterer Eintrag im Verzeichnis übereinstimmt, %filename%*. Ich glaube, die folgenden wiull in allen Fällen funktionieren:
Es würde immer noch funktionieren, wenn es solche Dateien, weil Sie nicht zurückkehren würde "<SYMLINKD>". Es würde fehlschlagen, wenn es ein anderes Verzeichnis, symbolischer link, der auf %filename%*.
Sie haben mir einen gefallen, indem wir diese Einrichtung, weil die Datei, die ich schreiben würde, scheitern an diesem problem, und ich hatte nicht dran gedacht. Soweit ich sagen kann, das folgende funktioniert in allen Fällen: set MYPATH=D:\testdir1 set FILENAME=mylink set FULL=%MYPATH%\%FILENAME% set SP1=0 for /f "tokens=4,5 delims=" %%A IN ('dir /L /N %%*') do ( if %%A EQU %FILENAME% ( if "%%" EQU "<SYMLINKD>" set SP1=1 ) ) wenn %, sp1% EQU 0 echo Es ist nicht da. wenn %, sp1% EQU 1 echo-BINGO! Pause
Sorry für die schreckliche Formatierung. Die fünf-Minuten-Fenster für die Bearbeitung timed out bevor ich es herausgefunden.
Vielleicht, dass neue Informationen in die eigentliche Antwort 🙂
InformationsquelleAutor Frank
Funktioniert das auch:
dir /al|find /i "java"|find /i "junction" && (
echo Verzeichnis ein symlink
)
InformationsquelleAutor Hames
Update: dies löste fein meine Aufgabe, aber als Kommentatoren darauf hingewiesen,
dir
zeigen die beiden Verzeichnis-symbolische Links-und Verzeichnis-junctions. Es ist also falsch, wenn abzweigungen vorhanden sind.Einfach
dir /A:ld
funktioniertdir /?
:Ein reparse point ist eine Datei symlink oder einem Verzeichnis symlink oder einem Verzeichnis junction: all das wird (wenn vorhanden) werden aufgelistet, durch die die DIR A:L-Befehl.
ok, ich sehe, danke. Ich habe diese ohne abzweigungen, so dass es geklappt hat
InformationsquelleAutor zxcat
Den entsprechenden DIR-Befehl ist in der folgenden batch-Datei (Analysepunkte.bat) -
InformationsquelleAutor Ed999
Ein alternativer Ansatz ist die Behandlung von jeder der drei Arten von reparse-Punkt - separat, in den folgenden batch-Datei (reparse2.bat), die leicht modifiziert werden, um die Suche nur nach der Art der Verknüpfung, die Sie interessiert sind -
InformationsquelleAutor Ed999