2010-01-04 15 views

Respuesta

4

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.

+0

+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

0

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 
+0

Las ACL también están involucradas. Ver la respuesta de Álvaro. – Joey

0

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 
    ) 
) 
-1
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.

+2

'ls -l' funcionaría con Linux, pero no con Windows – jeb

Cuestiones relacionadas