Hardlinks erstellen



  • Hi!

    Hat jemand von Euch ein Batch oder eine Idee dafür, wie ich für alle Dateien in einem Verzeichnis (und in dessen Unterverzeichnissen) in einem anderen Verzeichnis Hardlinks erstellen kann?

    Eine Version die für Dateien eines Unterordners funktionierte:

    set %d=TestDir

    md %d%_Hardlink

    for %%f in ("%d%/*") do fsutil hardlink create "%d%_Hardlink/%%f" "%d%/%%f"

    Man müsste mit for /R und /D alle Unterverzeichnisse durchlaufen, aber dann liefert %%f den absoluten Pfad und ich kann nicht mehr dran basteln 😞

    MfG

    Matg40



  • Es gibt afaik keine Hardlinks auf Windows.



  • Hi!

    Zumindest ab WinXP konnte ich mit

    fsutil hardlink create ziel.txt quelle.txt
    

    einen Hardlink "ziel.txt" auf Datei "quelle.txt" erzeugen.

    Mit Vista gehts mit mklink, aber das Batch sollte hauptsächlich unter XP laufen.

    Mein bisheriger Stand: Hardlink erzeugen ist kein Problem, mehr das rekursive Durchlaufen der Verzeichnisse...

    echo off
    
    cls
    
    set %d=Quelle
    set %e=Ziel
    
    for /R /D %%g in ("*") do ( 
    
    	echo pfad: %%~ng
    
    	@for %%f in ("%%g/*") do (
    
    		echo datei: %d%/%%~ng/%%~nf
    
    	) 
    
    )
    
    set %d=
    set %e=
    

    Ich kenne jetzt die einzelnen End-Verzeichnisse, aber nicht den Pfad ab der Quelle.

    Weiß jemand, wie ich mir in einer Variablen diesen zusammenbauen könnte (in jedem Schleifendurchgang eine Verzeichnis-Ebene hinzufügen kann)?

    Quelle/*

    Quelle/Unterverzeichnis1/*

    Quelle/Unterverzeichnis1/Unterverzeichnis2/*

    ...

    MfG

    Matg40



  • @cheopz: Das liegt nicht primär am Betriebssystem sondern am Dateisystem: FAT kann keine links NTFS ab 5.0.

    ich sag nur cygwin...

    greetz, Swordfish



  • Hi!

    Ja, ein Bekannter meinte auch, dass er es damit mal gelöst hat... aber ich möchte es auf mehreren XP-Rechnern flexibel einsetzen (einfach mal hinkopieren, wieder löschen...) und möglichst nichts installieren...

    MfG

    Matt



  • oje. Musses denn unbedingt eine batch sein oder wär executeable auch egal?

    greetz, Swordfish



  • Hi!

    Notfalls geht auch auch eine .exe 😉

    Stimmt, da könnt ich evtl. was programmieren.

    Batch hat halt den Charme, dass man leicht anpassen kann...

    MfG

    Matt



  • bash, sh, lisp, perl, sonstwas haben diesen Charme, weil sie überall laufen. eine command.com Nachahmung/"Erweiterung" ist ja noch nichteinmal unter den neueren Windowsversionen

    [ot]Aber was mann so hört will doch MS die Frequenz der Windowsreleases erhöhen... Und dabei das UI umwerfen... [opinion]Die sollten lieber was am Kernel und an Werkzeugen feilen[/opinion][/ot]

    Falls Du für die Entwicklung eines kleinen _schönen_ C-Progrämmchen bist steh' ich Dir natürlich bei 😉

    greetz, Swordfish



  • Hi!

    Werde ich mir überlegen 👍

    Nebenbei: gibts bei Batches eigentlich Variablen wie in C?

    Bei XSLT gibts ja keine, ists da u.U. auch so?

    (Weil viele meiner Versuche an der Pfad-Merker-Variable gescheitert sind)

    MfG

    Mag40



  • Was hat XSLT mit batch zu tun?

    set foo=bat
    echo %foo%
    

    greetz, Swordfish



  • Hi!

    War nur ein Beispiel wo Variablen sich nicht so verhalten, wie von C (u.ä.) her erwartet.

    Ich hab Probleme damit, in der Schleife einer Variablen das akutelle Verzeichnis mitzugeben (das ich aus %%~ng herauslese, siehe Code).

    Werde weiterprobieren...

    MfG

    Matg40



  • ja, eben. Wie willst Du mit einer batch durch Verzeichnisse iterieren die Du nicht kennst? Mir fällt da nix ein.

    greetz, Swordfish

    BTW: XSLT ist wie auch CSS keine Programmiersprache im eigentlichen Sinn...



  • Wenn ein C++-Programm auch möglich ist, dann lauf die Verzeichnisse rekursiv mit der WinAPI durch (MSDN: FindFirstFile, FindNextFile) und lege die Hardlinks an (gibts auch einen API-Aufruf, fällt mir grad nicht ein).

    MfG SideWinder

    PS: Und natürlich sind unter Windows Hardlinks möglich.



  • SideWinder schrieb:

    PS: Und natürlich sind unter Windows Hardlinks möglich.

    😮 Wer hat das Gegenteil behauptet?

    greetz, Swordfish



  • 1. Seite 1. Antwort

    MfG SideWinder



  • Nebenbei: gibts bei Batches eigentlich Variablen wie in C?

    Sehr seltsam (Ich habe da wahrscheinlich was nicht verstanden: In deinem Beispiel hast Du ja zweimal mit set eine Variable gemacht).

    Bei XSLT gibts ja keine, ists da u.U. auch so?

    Natürlich gibts Variablen bei XSLT.

    Rekursives Durchlaufen von Verzeichnisen in Batchfiles würde ich so formulieren:

    Prompt> dir /s /b
    

    😉

    Das kannst du dir dann ja als Eingabe pipen oder in eine Datei "snafu" schreiben und die dann mit

    Prompt> for /f %%f in (snafu) do nothing
    

    durchlaufen.

    Habe mit den Hardlinks auf NTFS wieder etwas dazugelernt.



  • @SideWinder: Ok
    @cheopz: Danke! Hab' was lernen dürfen 😉
    @OP: Hast Du Dein Problem lösen können?

    greetz, Swordfish



  • Hi!

    nee, es läuft noch nicht so ganz...

    Die Variablenzuweisung in der Schleife geht noch nicht.

    MfG

    Matg40


Anmelden zum Antworten