En bash, me gustaría utilizar¿Cómo comprobar si un archivo/dir se puede escribir en secuencias de comandos por lotes
[ -w ... ]
¿Cuál es el equivalente de archivos por lotes de Windows?
En bash, me gustaría utilizar¿Cómo comprobar si un archivo/dir se puede escribir en secuencias de comandos por lotes
[ -w ... ]
¿Cuál es el equivalente de archivos por lotes de Windows?
Por lo que yo sé, se puede averiguar si el archivo exists or not, pero no hay manera de saber si es grabable, además de tratar de escribir sobre él. No se trata solo de no tener el indicador R; los permisos de red y NTFS también están involucrados (y probablemente también las políticas de grupo).
Si puede reescribir su código, puede capturar el código de retorno de la operación de escritura a través del errorlevel.
puede hacerlo de esta manera el uso de VBScript
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile = objArgs(0)
Set objFile = objFS.GetFile(strFile)
If Not objFile.Attributes And 1 Then
WScript.Echo "The file is Read/Write."
Else
WScript.Echo "The file is Read-only."
End If
guardar como check.vbs y en la línea de comandos
c:\test> cscript //nologo check.vbs myfile
Las ACL también están involucradas. Ver la respuesta de Álvaro. – Joey
Lo siento gente para repican aquí ..
esto puede no ser 100% lo que está buscando, pero he utilizado esto con los archivos de registro en uso para Apache Tomcat y funciona a la perfección absoluta.
¡Gracias a @dbenham por su increíble código! https://stackoverflow.com/a/10520609/175063
SETLOCAL ENABLEDELAYEDEXPANSION
REM TOMCAT LOGS
FOR /r "D:\logs" %%X IN (*) DO (
SET FileName=%%~nxX
2>nul ( >>D:\logs\!FileName!" (call)) && (
REM DO STUFF HERE
SET ModDt=%%~tX
FOR /f "tokens=1-3 delims=.:/ " %%j IN ("!ModDt!") DO SET FDate=%%l-%%j-%%k&Set RegDate=%%j-%%k-%%l
IF "%CurrentDate%" NEQ "!FDate!" (
IF %%~zX GTR 0 (
ECHO ARCHIVING "D:\logs\!FileName!" >> %logfile%
7za.exe -tzip -y a "D:\Zips\%COMPUTERNAME%-Tomcat-!RegDate!-compressed.zip" "D:\logs\!FileName!" && (
DEL /Q "D:\logs\!FileName!"
) || (
if "%ERRORLEVEL%" == "2" (
echo Zipping failed ^(exit status %ERRORLEVEL%^). Trying again in 5 seconds...
) else (
echo Zip completed with warnings ^(most likely because a file was locked by another
echo process and had to be skipped^). Trying again in 5 seconds...
)
del "D:\Zips\%COMPUTERNAME%-Tomcat-!RegDate!-compressed.zip" >NUL 2>&1
PING 0.0.0.0 -n 6 -w 1000 >NUL
)
)
)
REM END OF UNLOCKED ZONE
) || (
ECHO FILE IS LOCKED
)
)
ls -l foo.txt
salidas -r - r - r-- para un archivo no se puede escribir salidas -rw-r - r-- para un archivo modificable
podría almacenar el valor y comprobar si el 3er carácter es "w" para escritura o "-" para no escritura.
usando alguna sintaxis como %myVar:~2,1%
en una declaración condicional.
no estoy seguro de cómo dependería del sistema operativo esto.
'ls -l' funcionaría con Linux, pero no con Windows – jeb
+1 para mencionar permisos. Definitivamente no es solo cuestión de la bandera de solo lectura que sería trivial verificar con '% ~ ax' o algo así. – Joey