【发布时间】:2011-01-01 06:45:47
【问题描述】:
在 bash 中,我会使用
[ -w ... ]
Windows 批处理文件的等价物是什么?
【问题讨论】:
-
@darthbith 如果它比可能重复的问题早一年多,它怎么可能是重复的?
-
那么也许副本应该走另一条路¯_(ツ)_/¯ 不过,IMO 有一个更好的答案
标签: windows batch-file writable
在 bash 中,我会使用
[ -w ... ]
Windows 批处理文件的等价物是什么?
【问题讨论】:
标签: windows batch-file writable
据我所知,你可以查出文件exists or not是否可以写,但除了尝试在上面写之外,没有办法知道它是否可写。这不仅仅是没有 R 标志的问题;还涉及网络和 NTFS 权限(可能还涉及组策略)。
如果你可以重写你的代码,你可以通过errorlevel捕获写操作的返回码。
【讨论】:
%~ax 或类似的东西检查是微不足道的。
对不起,在这里插话的人..
这可能不是您所寻找的 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
)
)
【讨论】:
这是旧的,但我没有在这里找到它:
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 命令以相同的方式:
rename "path\1.txt" "1.txt" >nul 2>nul
echo.%ERRORLEVEL%
要测试它,只需添加 path\ - deny all for 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
【讨论】:
ls -l foo.txt
输出 -r--r--r-- 用于不可写文件 输出 -rw-r--r-- 用于可写文件
您可以存储该值并检查第三个字符是“w”表示可写还是“-”表示不可写。
在条件语句中使用 %myVar:~2,1% 之类的语法。
不确定这将如何依赖操作系统。
【讨论】: