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
)
)
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
6条答案
按热度按时间irlmq6kh1#
据我所知,你可以找出文件exists or not,但没有办法知道它是否是可写的,除了尝试写它。这不仅仅是没有R旗帜的问题;还涉及网络和NTFS权限(可能还有组策略)。
如果您可以重写代码,则可以通过errorlevel捕获写操作的返回代码。
iezvtpos2#
对不起,各位在这里打岔。
这可能不是100%你正在寻找的,但我已经用它与在使用的日志文件的Apache Tomcat和它的工作绝对完美。
感谢@dbenham提供的令人敬畏的代码!https://stackoverflow.com/a/10520609/175063
字符串
b4wnujal3#
这是旧的,但我没有在这里找到它:
字符串
型
move
不会更改文件创建/更改/访问时间。https://www.dostips.com/forum/viewtopic.php?t=5542
要检查对目录的访问权限,您可以使用
rename
命令进行相同的操作:型
要测试它,只需添加
path\
-deny all
的Everyone
。yvfmudvl4#
你可以这样做使用vbscript
字符串
保存为check.vbs并在命令行上
型
mlnl4t2r5#
我发现的最可靠的方法是将NUL复制到目标目录中的文件。
如果该目录不存在或当前用户无法写入该目录,则将以1退出。
我使用/B作为NUL是二进制的,使用/Y覆盖现有的文件。
字符串
lnvxswe26#
字符串
outputs -r--r--r--对于不可写文件outputs -rw-r--r--对于可写文件
您可以存储该值并检查第三个字符是否为“w”(可写)或“-”(不可写)。
在条件语句中使用像
%myVar:~2,1%
这样的语法。不确定这将如何依赖于操作系统。