2010-01-04 143 views

回答

4

據我所知,你可以找出文件是否exists or not,但除了試圖寫入它之外,沒有辦法知道它是否可寫入。這不僅是沒有R標誌的問題;網絡和NTFS權限也會涉及(也可能是組策略)。

如果你可以重寫你的代碼,你可以捕捉到寫操作的返回碼槽的errorlevel

+0

提及權限+1。這絕對不只是只讀標誌的問題,用'%〜ax'或類似的東西來檢查將是微不足道的。 – Joey 2010-01-04 15:16:40

0

,你可以做這樣的使用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 

另存爲check.vbs和命令行

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

ACL也涉及到。見Álvaro的答案。 – Joey 2010-01-04 15:17:50

0

在這裏鳴響對不起鄉親..

這可能不是100%,你在找什麼,但我已經與Apache Tomcat上正在使用的日誌文件中使用這個和它的作品萬無一失。

感謝@dbenham他真棒代碼! 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 

輸出-r - R的 - R--一個不可寫文件 輸出-rw-R - R--可寫文件

你可以存儲值,並檢查第3個字符是否爲可寫的「w」或不可寫的「 - 」。使用

在條件語句中的一些語法像%myVar:~2,1%

不知道如何與操作系統有關,這將是。

+2

'ls -l'可以和linux一起使用,但不能和windows一起使用 – jeb 2016-09-23 22:13:30

相關問題