Frage

Ich schreibe eine Batch-Datei, und ich muss wissen, ob eine Datei nur gelesen wird. Wie kann ich das tun?

Ich weiß, wie man sie erhält das% ~ ein Modifikator verwenden, aber ich weiß nicht, was mit diesem Ausgang zu tun. Es gibt so etwas wie -ra ------. Wie kann ich dies in Batch-Datei analysieren?

War es hilfreich?

Lösung

So etwas sollte funktionieren:

@echo OFF

SETLOCAL enableextensions enabledelayedexpansion

set INPUT=test*

for %%F in (%INPUT%) do (
    set ATTRIBS=%%~aF
    set CURR_FILE=%%~nxF
    set READ_ATTRIB=!ATTRIBS:~1,1!

    @echo File: !CURR_FILE!
    @echo Attributes: !ATTRIBS!
    @echo Read attribute set to: !READ_ATTRIB!

    if !READ_ATTRIB!==- (
        @echo !CURR_FILE! is read-write
    ) else (
        @echo !CURR_FILE! is read only
    )

    @echo.
)

Als ich das laufen bekomme ich folgende Ausgabe:

File: test.bat
Attributes: --a------
Read attribute set to: -
test.bat is read-write

File: test.sql
Attributes: -ra------
Read attribute set to: r
test.sql is read only

File: test.vbs
Attributes: --a------
Read attribute set to: -
test.vbs is read-write

File: teststring.txt
Attributes: --a------
Read attribute set to: -
teststring.txt is read-write

Andere Tipps

eine bestimmte Datei testen:

dir /ar yourFile.ext >nul 2>nul && echo file is read only || echo file is NOT read only

Um eine Liste zu lesen bekommt nur Dateien

dir /ar *

eine Liste der Lese- / Schreib-Dateien erhalten

dir /a-r *

Um alle Dateien auflisten und berichten, ob nur lesen oder lesen / schreiben:

for %%F in (*) do dir /ar "%%F" >nul 2>nul && echo Read Only:  %%F|| echo Read/Write: %%F

EDIT

Patrick Antwort schlägt fehl, wenn der Dateiname ! enthält. Dies kann durch Hin- und Herschalten verzögerte Expansion und Ausschalten innerhalb der Schleife gelöst werden, aber es gibt einen anderen Weg, um den Wert %%~aF zu sondieren, ohne zu einer verzögerten Expansion zurückgreifen oder auch eine Umgebungsvariable:

for %%F in (*) do for /f "tokens=1,2 delims=a" %%A in ("%%~aF") do (
  if "%%B" equ "" (
    echo "%%F" is NOT read only
  ) else (
    echo "%%F" is read only
  )
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top