2010-01-04 20 views

risposta

4

Per quanto ne so, è possibile scoprire se il file exists or not, ma non c'è modo di sapere se è scrivibile, a parte cercare di scrivere su di esso. Non è solo questione di non avere il flag R; anche le autorizzazioni di rete e NTFS sono coinvolte (e probabilmente anche le politiche di gruppo).

Se è possibile riscrivere il codice, è possibile acquisire il codice di ritorno dell'operazione di scrittura tramite errorlevel.

+0

+1 per menzionare le autorizzazioni. Non è solo una questione di flag di sola lettura che sarebbe banale controllare con '% ~ ax 'o qualcosa del genere. – Joey

0

si può fare in questo modo utilizzando 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 

Salva con nome check.vbs e sulla linea di comando

c:\test> cscript //nologo check.vbs myfile 
+0

Anche gli ACL sono coinvolti. Vedi la risposta di Álvaro. – Joey

0

Mi spiace per rintocchi qui ..

questo non può essere al 100% quello che stai cercando, ma ho usato questo con i file di log in uso per Apache Tomcat e funziona assolutamente perfetta.

Grazie a @dbenham per il suo fantastico codice! 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 

uscite -r - r - r-- per un file non scrivibile uscite -rw-r - r-- per un file scrivibile

è possibile memorizzare il valore e controlla se il 3 ° carattere è "w" per scrivibile o "-" per non modificabile.

utilizzando una sintassi come %myVar:~2,1% in un'istruzione condizionale.

non so come sarebbe il SO dipendente.

+2

'ls -l' potrebbe funzionare con Linux ma non con Windows – jeb

Problemi correlati