如何检查文件/目录是否在批处理脚本
据我所知,你可以找出文件是否exists or not,但除了试图写入它之外,没有办法知道它是否可写入。这不仅是没有R标志的问题;网络和NTFS权限也会涉及(也可能是组策略)。
如果你可以重写你的代码,你可以捕捉到写操作的返回码槽的errorlevel。
,你可以做这样的使用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
ACL也涉及到。见Álvaro的答案。 – Joey 2010-01-04 15:17:50
在这里鸣响对不起乡亲..
这可能不是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
)
)
ls -l foo.txt
输出-r - R的 - R--一个不可写文件 输出-rw-R - R--可写文件
你可以存储值,并检查第3个字符是否为可写的“w”或不可写的“ - ”。使用
在条件语句中的一些语法像%myVar:~2,1%
。
不知道如何与操作系统有关,这将是。
'ls -l'可以和linux一起使用,但不能和windows一起使用 – jeb 2016-09-23 22:13:30
提及权限+1。这绝对不只是只读标志的问题,用'%〜ax'或类似的东西来检查将是微不足道的。 – Joey 2010-01-04 15:16:40