In bash, vorrei utilizzareCome verificare se un file/dir è scrivibile in script batch
[ -w ... ]
Qual è l'equivalente per i file batch di Windows?
In bash, vorrei utilizzareCome verificare se un file/dir è scrivibile in script batch
[ -w ... ]
Qual è l'equivalente per i file batch di Windows?
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.
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
Anche gli ACL sono coinvolti. Vedi la risposta di Álvaro. – Joey
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
)
)
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.
'ls -l' potrebbe funzionare con Linux ma non con Windows – jeb
+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