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

相关问题