Wie kann ich eine Datei in Windows sperren, ohne sie zu ändern oder Tools von Drittanbietern zu verwenden?


24

Gibt es eine Möglichkeit, eine Datei mit integrierten Tools zu sperren, damit sie nicht gelöscht oder überschrieben werden kann?

Zum Testen von Kopierskripten muss ich lock files temporarilydie Fehlerbehandlung in den Skripten überprüfen. Bis XP habe ich eine Datei in debug.exe geladen, um sie zu sperren.

Gibt es eine Möglichkeit in Windows 7 (und höher)?

Edit
Ich weiß, dass es Programme gibt, die das tun. Meine Frage ist, ob es in Windows einen eingebauten Mechanismus gibt. Manchmal muss ich ein Skript auf einem PC überprüfen und möchte dafür keine neuen Programme installieren.

Edit2
Hier sind auch gute Vorschläge: Wie kann man gezielt eine Datei exklusiv sperren? , die jedoch Tools von Drittanbietern benötigen oder die zu sperrende Datei ändern.


Funktioniert der Notizblock-Trick für Sie?
Nixda

1
@ nixda Nein. Die Datei wird überschrieben. Ich muss eine vorhandene Datei sperren, ohne sie zu ändern.
Marsh-Wiggle

Aha. Ich
ziehe

Antworten:


45

Ich denke, PowerShell ist wahrscheinlich der beste Weg, dies zu erreichen. So etwas wie das folgende:

#Specify the file name
$fileName = "C:\myfile.txt"

#Open the file in read only mode, without sharing (I.e., locked as requested)
$file = [System.io.File]::Open($fileName, 'Open', 'Read', 'None')

#Wait in the above (file locked) state until the user presses a key
Write-Host "Press any key to continue ..."
$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

#Close the file (This releases the current handle and unlocks the file)
$file.Close()

Während der Pause führt das obige Skript zu der folgenden Aufforderung, wenn versucht wird, "myfile.txt" zu öffnen:

Bildbeschreibung hier eingeben


2
Groß! Vielen Dank! Zu meiner Schande muss ich gestehen, dass ich mich in Powershell entwickelt habe und nicht daran gedacht habe, die .net-Klassen dafür zu verwenden. [Ich hoffe, das geht nicht weiter :-)]
Marsh-Wiggle

1
Gute Antwort. Für die Neugierigen, hier ist der MSDN Link auf die File::OpenMethode , die Parameter des Aufrufs Detaillierung (genauer gesagt, das letzte Argument, 'None', lehnt die Aufteilung der Datei mit anderen Threads / Prozesse - nur und ebenso existieren Vorschriften über die Datei zum Lesen / Schreiben sperren oder eine Kombination davon).
Durchbruch

1
@moab Die Datei wird geschlossen und das Handle am Ende freigegeben.
Dan

2
Beachten Sie $host.UI.RawUI.ReadKey(...), dass dies in PowerShell ISE fehlschlägt, da ReadKey für die ISE nicht implementiert ist. Die Problemumgehung ist [void](Read-Host 'Press Enter to continue'). Nicht genau so, wie der Benutzer die Eingabetaste drücken muss, sondern eine beliebige Taste. Für die meisten Zwecke jedoch gut genug. Die Problemumgehung kam von diesem Blog-Beitrag: jeffwouters.nl/index.php/2016/06/…
SimonTewsi

4

Da ich keine Software installieren möchte, die ich nicht wirklich verwende, habe ich dieses Juwel eines VBScript gefunden:

Const ForAppending = 8
Set oFSO = CreateObject("Scripting.FileSystemObject")

Set f = oFSO.OpenTextFile("C:\Tst\My2.txt", ForAppending, True)

MsgBox "Press OK to unlock the file(s)"

Das gesamte Guthaben geht an Torgeir Bakken. Den vollständigen Beitrag finden Sie hier: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/


Schön für diejenigen, die keine PowerShell mögen, wie die Lösung oben
Marsh-Wiggle

0

Können Sie es nicht als schreibgeschützt markieren? Dies würde die Datei effektiv "sperren", indem sie nicht geändert oder gelöscht werden kann.

Der Befehl attrib.exe ist in der Befehlszeile verfügbar und ermöglicht es Ihnen, eine Datei oder ein Verzeichnis als schreibgeschützt festzulegen. Weitere Informationen zu diesem Befehl finden Sie hier

Umgekehrt können Sie dasselbe über die Benutzeroberfläche tun, indem Sie mit der rechten Maustaste auf die Datei oder das Verzeichnis klicken, die bzw. das Sie als schreibgeschützt markieren möchten, Eigenschaften auswählen und das Kontrollkästchen Schreibgeschützt aktivieren. Wenn Sie auf Übernehmen / Ok klicken, wird die neue Einstellung auf die Datei oder das Verzeichnis angewendet.


3
Das schreibgeschützte Attribut verhindert nur Änderungen, nicht aber das Löschen.
ComFreek

0

Ist es nicht möglich, den Zugriff auf die Datei über die Registerkarte "Sicherheit" einzuschränken, wenn Sie mit der rechten Maustaste klicken und zu "Eigenschaften" für die Datei oder den Ordner wechseln?

Wenn der Benutzer über Administratorzugriff auf den PC verfügt, kann er dann nicht alle anderen Funktionen entfernen, die mit der Datei / dem Ordner zu tun haben?

Ich muss während der Eingabe zugeben, dass mein Arbeits-PC immer noch unter WinXP Pro läuft. Daher ist das, was ich oben angegeben habe, möglicherweise nicht mehr verfügbar. Ich fühle mich mit meiner neuen Win 8.1 Pro-Box zuhause immer noch nicht so wohl wie mit der Jahre der Arbeit mit Win XP


Keine der verfügbaren NTFS-Berechtigungen würde das Verhalten einer gesperrten Datei nachahmen. Am ehesten wäre es, die Datei schreibgeschützt zu machen, aber wir können sicher sein, dass das OP diese Option kennt und aus gutem Grund nach dem Sperren der Datei fragt.
Ich sage Reinstate Monica

-2

In einigen Szenarien erledigt das Erstellen eines neuen Ordners mit dem Namen der Datei möglicherweise die Aufgabe. (Beim Versuch, die Datei zu öffnen, tritt ein Fehler auf.)


Dies ist wirklich ein Kommentar und keine Antwort auf die ursprüngliche Frage.
DavidPostill

Für mich war es die Antwort in der Aufgabe, die mich zu dieser Seite führte. Wegen Leuten wie Ihnen wird es jemand in seiner ähnlichen Aufgabe nicht finden.
noonex

3
OP fragte, wie eine vorhandene Datei gesperrt werden soll . Das Erstellen eines Ordners mit demselben Namen ist nicht möglich. "Ein Unterverzeichnis oder eine Datei xxx existiert bereits", sodass Ihre Antwort nicht auf das Problem in der Frage anwendbar ist.
DavidPostill

In vielen Fällen ist die Option "Vorhandene Datei sperren" erforderlich, um sicherzustellen, dass bei dem Versuch, die Datei zu ändern oder zu öffnen, eine Fehlermeldung angezeigt wird. Ich werde jetzt wirklich aufhören, offensichtliche Dinge zu erklären - ich wünsche Ihnen einen schönen Tag, Sir.
noonex
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.