¿Cómo bloquear un archivo en Windows sin cambiarlo o usar herramientas de terceros?

24

¿Hay alguna manera de bloquear un archivo con herramientas integradas para que no se pueda eliminar o sobrescribir?

Para probar los scripts de copia, debo lock files temporarilyverificar el manejo de errores en los scripts. Hasta XP utilicé cargar un archivo en debug.exe para bloquearlo.

¿Hay alguna manera en Windows 7 (y posterior)?

Editar
Sé que hay programas haciendo esto. Mi pregunta es si hay un mecanismo incorporado en Windows. A veces tengo que verificar un script en una PC y no quiero instalar nuevos programas para eso.

Edit2
Aquí también hay buenas sugerencias: ¿Cómo bloquear a propósito exclusivamente un archivo? , que, sin embargo, necesitan herramientas de terceros o cambian el archivo a bloquear.

meneo de pantano
fuente
¿El truco del bloc de notas funciona para ti?
nixda
1
@nixda No. Sobrescribe el archivo. Necesito bloquear un archivo actual sin cambiarlo.
marsh-wiggle
Veo.
Retracto

Respuestas:

45

Creo que PowerShell es probablemente la mejor manera de lograr esto. Algo como lo siguiente:

#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()

Mientras está en pausa, la secuencia de comandos anterior provoca el siguiente mensaje al intentar abrir "myfile.txt":

ingrese la descripción de la imagen aquí

Dan
fuente
2
¡Excelente! ¡Gracias! Para mi vergüenza, debo confesar que me desarrollé en powershell y no pensé en usar las clases .net para esto. [Espero que eso no vaya más allá :-)]
marsh-wiggle
1
Buena respuesta. Para los curiosos, aquí está el enlace de MSDN al File::Openmétodo que detalla los parámetros de la llamada (específicamente, el último argumento 'None', rechaza compartir el archivo con cualquier otro subproceso / proceso, y del mismo modo, existen disposiciones para bloquear el archivo solo para lectura / escritura o una combinación de los mismos).
Avance
1
@moab El archivo se cierra y se libera el identificador al final.
Dan
2
Tenga en cuenta $host.UI.RawUI.ReadKey(...)que fallará en PowerShell ISE ya que ReadKey no está implementado para el ISE. La solución es [void](Read-Host 'Press Enter to continue'). No es exactamente lo mismo que el usuario tiene que presionar Entrar en lugar de cualquier tecla. Sin embargo, lo suficientemente bueno para la mayoría de los propósitos. La solución provino de esta publicación de blog: jeffwouters.nl/index.php/2016/06/…
SimonTewsi
4

Como no me gusta instalar software que realmente no usaré, encontré esta joya de un VBScript:

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)"

Todo el crédito va a Torgeir Bakken, puede ver la publicación completa aquí: http://www.pcreview.co.uk/threads/how-to-lock-files.1518829/

Eriks Ocakovskis
fuente
Agradable para aquellos que no les gusta PowerShell como la solución anterior
marsh-wiggle
0

¿No puede marcarlo como de solo lectura? Esto efectivamente "bloqueará" el archivo al no permitir que sea cambiado o eliminado.

El comando attrib.exe está disponible en la línea de comando y le permitirá configurar un archivo o directorio para que sea de solo lectura. Puede encontrar más información sobre ese comando aquí

Por el contrario, puede hacer lo mismo a través de la GUI haciendo clic con el botón derecho en el archivo o directorio en el que desea marcar solo lectura, seleccionando propiedades y marcando el cuadro Solo lectura. Al hacer clic en Aplicar / Aceptar, se aplica la nueva configuración al archivo o directorio.

Derek Wirch
fuente
3
El atributo de solo lectura solo evita modificaciones pero no eliminaciones.
ComFreek
0

¿No sería posible limitar la accesibilidad al archivo con la pestaña Seguridad al hacer clic con el botón derecho e ir a Propiedades para el archivo o la carpeta?

Si el usuario tiene acceso de administrador a la PC, ¿esto no le permitiría eliminar la capacidad de todos los demás para hacer algo con el archivo / carpeta?

A medida que escribo, debo admitir que mi PC de trabajo todavía está en WinXP Pro, por lo que lo que dije anteriormente puede que ya no esté disponible: todavía no estoy tan cómodo con mi nueva caja de Win 8.1 Pro en casa como con el años de trabajo con Win XP

Botas66
fuente
Ninguno de los permisos NTFS disponibles imitaría el comportamiento de un archivo bloqueado. Lo más cercano sería hacer que el archivo sea de solo lectura, pero podemos estar seguros de que el OP conoce esa opción y pregunta por bloquear el archivo por una buena razón.
Digo reinstalar a Mónica
-2

En algunos escenarios, crear una nueva carpeta con el nombre del archivo puede hacer el trabajo. (Es decir, aparece un error al intentar abrir el archivo).

noonex
fuente
Esto es realmente un comentario y no una respuesta a la pregunta original.
DavidPostill
Para mí fue la respuesta en la tarea lo que me llevó a esta página. Debido a personas como usted, alguien no lo encontrará en su tarea similar.
noonex
3
OP preguntaba cómo bloquear un archivo existente . No es posible crear una carpeta con el mismo nombre. "Ya existe un subdirectorio o archivo xxx", por lo que su respuesta no es aplicable al problema en la pregunta.
DavidPostill
En muchos casos, se necesita "bloquear el archivo existente" para asegurarse de que la aplicación recibirá un error al intentar modificarlo o abrirlo. Realmente dejaré de explicar cosas obvias ahora. Que tenga un buen día, señor.
noonex