Unter NTFS gibt es einen simplen Trick das zu realisieren: Versteckte Dateistreams.
Hier erst einmal das Funktionsprinzip:
Code:
echo Das ist ein Test > bla.txt
type bla.txt
Was gibt type wohl aus? Ganz klar: ?Das ist ein Test?
Und nun:
Code:
echo Das ist geheim > bla.txt:2
Der dir-Befehl zeigt Dir an, dass die Datei NICHT größer geworden ist. Und der type-Befehl gibt noch immer nur ?Das ist ein Test? aus. Aber was passiert hier?:
Siehe da: ?Das ist geheim? wird angezeigt. Wie das? Ganz einfach. Das NTFS-Filesystem unterstützt mehrere parallele Datenablagen. Sie werden Streams genannt. Das funktioniert so: Ein Dateiname ist eine Adresse, vergleichbar mit einer Tür, hinter der sich nicht die Daten, sondern weitere (Hinter-) Türen befinden. Erst nach der Hintertür folgen die Daten. Die Hintertüren lassen sich mit : ansprechen. Wird jedoch keine Hintertür angegeben, so greift Windows automatisch auf eine Standardhintertür innerhalb der Datei zu (den Hauptstream). Deshalb verhält sich die Datei unter NTFS wie eine normale Datei. Selbst der Explorer zeigt nur die Größe des Hauptstreams der Datei an. Er bekommt nicht mit, wenn ein weiterer Stream innerhalb derselben Datei Daten enthält. Die Dateigröße ändert sich aus Sicht des Explorers also nicht, weil er die Daten nicht ?sieht?.
Seit NT4 macht MS das Publik (funzen tut es aber schon seit NT3.5) und ab dem VS 6 gibt es sogar Systemroutinen, die Streams unterstützen.
Doch zurück zu Deinem Problem: Du kannst die .bat-Datei mit Hilfe von
Code:
type my.bat >> my.doc:GeheimerStream
in einen zweiten Stream schreiben. Im Makro der .doc-Datei muß Du folgenden Systemcall erstellen:
Code:
cmd < my.doc:GeheimerStream
Und schwubs, schon läuft die .bat.
Bye, nz