كيفية التحقق مما إذا كان ملف/dir قابل للكتابة في البرامج النصية الدُفعات

StackOverflow https://stackoverflow.com/questions/1999988

  •  22-09-2019
  •  | 
  •  

سؤال

في باش ، سأستخدم

[ -w ... ]

ما هو ما يعادل ملفات دفعة Windows؟

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

المحلول

على حد علمي ، يمكنك معرفة ما إذا كان الملف موجود أم لا, ، ولكن لا توجد وسيلة لمعرفة ما إذا كانت قابلة للكتابة ، بصرف النظر عن محاولة الكتابة عليها. إنها ليست فقط مسألة عدم وجود ص علَم؛ تشارك أذونات الشبكة و NTFS أيضًا (وربما سياسات المجموعة أيضًا).

إذا تمكنت من إعادة كتابة التعليمات البرمجية الخاصة بك ، فيمكنك التقاط رمز الإرجاع لعملية الكتابة خطأ.

نصائح أخرى

آسف يا رفاق هنا ..

قد لا يكون هذا 100 ٪ ما تبحث عنه ، لكنني استخدمت هذا مع ملفات السجل قيد الاستخدام لأباش 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
    )
)

يمكنك أن تفعل ذلك مثل هذا باستخدام 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% في بيان مشروط.

لست متأكدا كيف يعتمد نظام التشغيل هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top