在Bash中,我会使用
在 Windows 中,批处理文件的等效物是什么?
[ -w ... ]
在 Windows 中,批处理文件的等效物是什么?
[ -w ... ]
%~ax
或类似方法轻松检查此问题。 - JoeySETLOCAL 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
)
)
这是旧的,但我在这里没有找到它:
lock.bat
(
echo.123
pause
) > "1.txt"
test.bat
move /Y "1.txt" "1.txt" >nul 2>nul
echo.%ERRORLEVEL%
move
命令不会更改文件的创建、修改和访问时间。
https://www.dostips.com/forum/viewtopic.php?t=5542
rename "path\1.txt" "1.txt" >nul 2>nul
echo.%ERRORLEVEL%
为了测试它,只需在路径\
中添加deny all
以针对Everyone
。
你可以使用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
copy /Y /B NUL "c:\test\test.txt"
echo %ERRORLEVEL%
ls -l foo.txt
对于不可写的文件,输出-r--r--r-- 对于可写的文件,输出-rw-r--r--
您可以存储该值并检查第3个字符是" w "表示可写还是"-"表示不可写。
在条件语句中使用类似% myVar:~2,1%
的某些语法。
不确定这对操作系统的依赖性。