7

在 bash 中,我会使用

[ -w ... ]

Windows 批处理文件的等价物是什么?

4

5 回答 5

3

据我所知,您可以找出文件是否存在,但是除了尝试在其上写入之外,没有办法知道它是否可写。这不仅仅是没有R标志的问题。还涉及网络和 NTFS 权限(可能还涉及组策略)。

如果你可以重写你的代码,你可以通过errorlevel捕获写操作的返回码。

于 2010-01-04T15:02:46.963 回答
1

对不起大家在这里插话..

这可能不是您正在寻找的 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
    )
)
于 2016-01-18T08:19:57.820 回答
1

这是旧的,但我没有在这里找到它:

锁定.bat

(
  echo.123
  pause
) > "1.txt"

测试.bat

move /Y "1.txt" "1.txt" >nul 2>nul
echo.%ERRORLEVEL%

move不会更改文件创建/更改/访问时间。

https://www.dostips.com/forum/viewtopic.php?t=5542


要检查目录的访问权限,您可以使用以下rename命令:

rename "path\1.txt" "1.txt" >nul 2>nul
echo.%ERRORLEVEL%

要测试它,只需添加 for path\- deny allfor Everyone

于 2020-01-23T18:14:07.897 回答
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
于 2010-01-04T14:58:58.243 回答
-1
ls -l foo.txt

输出 -r--r--r-- 用于不可写文件 输出 -rw-r--r-- 用于可写文件

您可以存储该值并检查第三个字符是“w”表示可写还是“-”表示不可写。

%myVar:~2,1%在条件语句中使用一些语法。

不确定这将如何依赖操作系统。

于 2016-09-23T20:57:08.620 回答