Frage

In Bash würde ich verwenden

[ -w ... ]

Was ist das Äquivalent für Windows -Batch -Dateien?

War es hilfreich?

Lösung

Soweit ich weiß, können Sie herausfinden, ob die Datei existiert oder nicht, Aber es gibt keine Möglichkeit zu wissen, ob es schriftlich ist, abgesehen davon, dass es versucht, darüber zu schreiben. Es geht nicht nur darum, das nicht zu haben R Flagge; Network- und NTFS -Berechtigungen sind ebenfalls beteiligt (und wahrscheinlich auch Gruppenrichtlinien).

Wenn Sie Ihren Code neu schreiben können, können Sie den Rückgabecode des Schreibvorgangs durch die Writing -Operation erfassen Fehlerlevel.

Andere Tipps

Sorry Leute, die hier eingeschüttet haben.

Dies ist vielleicht nicht zu 100% das, wonach Sie suchen, aber ich habe dies mit In-Use-Protokolldateien für Apache Tomcat verwendet und es funktioniert absolut perfekt.

Vielen Dank an @dbenham für seinen großartigen Code! 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
    )
)

Sie können es mit VBScript so machen

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

Speichern Sie als check.vbs und auf Befehlszeile

c:\test> cscript //nologo check.vbs myfile
ls -l foo.txt

Ausgänge -r- r-R-- Ausgänge für eine nicht beschreibbare Dateiausgänge -rw-r-R-- für eine beschreibbare Datei

Sie können den Wert speichern und prüfen, ob der 3. Charakter "W" für beschreibbar ist oder "-" für nicht beschreibbar ist.

Verwenden einer Syntax wie %myVar:~2,1% in einer bedingten Aussage.

Ich bin mir nicht sicher, wie os abhängig sein würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top