سؤال

أنا أكتب ملف دفعي وأحتاج إلى معرفة ما إذا كان يتم قراءة الملف فقط. كيف أقوم بذلك ؟

أنا أعرف كيفية الحصول عليها باستخدام٪ ~ المعدل ولكن لا أعرف ماذا أفعل مع هذا الإخراج. انه يعطي شيئا مثل أرا ------. كيف يمكنني تحليل هذا في ملف دفعي؟

هل كانت مفيدة؟

المحلول

شيء من هذا القبيل يجب أن تعمل:

@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.
)

عندما أقوم بتشغيل هذا أحصل على الإخراج التالي:

ملف: اختبار. Test.SQL تتم قراءة الملف فقط: Test.vbs سمات: - ------ قراءة السمة المضطربة على: - test.vbs هو ملف قراءة الكتابة: teststring.txt السمات: - ----- - قراءة السمة المضطربة إلى: - teststring.txt هو قراءة الكتابة

نصائح أخرى

لاختبار ملف معين:

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

للحصول على قائمة بملفات قراءة فقط

dir /ar *

للحصول على قائمة بملفات القراءة / الكتابة

dir /a-r *

لسرد جميع الملفات والتقرير ما إذا كان القراءة فقط أو القراءة / الكتابة:

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

تعديل

إجابة باتريك فشل إذا كان اسم الملف يحتوي على !. وبعد يمكن حل هذا عن طريق تبديل التوسع المتأخر وإيقاف تشغيله داخل الحلقة، ولكن هناك طريقة أخرى للتحقيق %%~aF القيمة دون اللجوء إلى تأخير التوسع، أو حتى متغير بيئة:

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
  )
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top