سؤال

أحاول كتابة برنامج نصي دفعة صغيرة سيؤدي إلى حذف الملفات القديمة من الدليل. المعلمة الأولى هي دليل البرنامج النصي للنظر فيها، والثاني هو عدد الملفات للحفاظ على.

rem @ECHO OFF

rem %1 is the path in which to look for the files
rem %2 is the number of recent files to preserve

if [%1] EQU [] (
    echo ERROR: Missing Required Paramater directory path.
    goto :eof
)

if [%2] EQU [] (
    echo ERROR: Missing Required Paramater, number of files to preserve
    goto :eof
)

if %2 LSS 0 (
    echo ERROR: Number of files to preserve provided was negative
    goto :eof
)

set FolderPath=%1
set SafeNumber=%2

cd %FolderPath%

for /f %%f in ('dir /O-D /A-D /B') do call :delete %%f
goto :eof

:delete
if %SafeNumber% LEQ 0 (
    del %1
) else (
    set /a SafeNumber-=1
)
goto :eof

:eof

أساسا ما لدي هنا هو دير يخرج قائمة من أسماء الملفات المطلوبة من الأحدث إلى الأقدم. اعتمادا على ما هو SafeNumber، ستخطى الملفات القليلة الأولى ثم Procede مع حذف مرة واحدة SafeNumber <= 0.

المشكلة التي أواجهها الآن، إذا كان اسم الملف هو "اختبار file.txt" (كما هو الحال يحتوي على مساحة. "اختبار" يتم تمريره في حذف كنسبة٪ 1، بدلا من ذلك "اختبار file.txt".

أي أفكار حول كيفية الحصول على العمل النصي الخاص بي، أو ربما شخص ما لديه حل مكتوب أفضل؟

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

المحلول

هل حاولت وضع علامات اقتباس حول اسم الملف في المدخلات الخاصة بك، أو في البرنامج النصي الخاص بك؟ أعني حول٪ F أو٪ 1، للسيناريو.

نصائح أخرى

للتعامل مع مسافة بيضاء في أسماء الملفات، إلخ. سترغب في الاقتباس عن أسماء الملفات والمسارات "٪ 1" إلخ .... ربما تكون هذه المشكلة الوحيدة.

يجب أن تضطر إلى استخدام الأمر البحث مع -Newer ثم -EXEC RM. على سبيل المثال لحذف كل الملف الأحدث من file.txt تفعل:

find . -type f -newer file.txt -exec rm {} \;

منذ وقت طويل، كتبت بروغ Java بسيط من المفترض أن يتم إطلاقه من وحدة التحكم، أي من ملف دفعي. تقوم بروغ بحذف الملفات القديمة من دليل محدد. تحقق من ذلك هنا, ، أنا في الواقع لا أتذكر كيف يعمل بالضبط، لكنني أقترح استخدامه أولا على مجلد اختبار. من المفترض أن تستخدم لنظام التشغيل Windows، على الأقل هناك هو المكان الذي استخدمته فيه.

لقد قمت الآن بتسجيل الدخول إلى جهاز Mac، حيث أستخدم البرنامج النصي الآلي التالي الذي أطلقه على كل تمهيد للقيام بهذه الوظيفة:

find /Users/<yourUser>/Downloads/* -type f -mtime +90 -exec mv -f {} /Users/<yourUser>/.Trash \;

تغيير الخاص بك لحلقة، والتخلص من وظيفة حذف الخاص بك.

for /f "skip=%safenum%" %%f in ('dir /o-d /a-d /b') do ( del %%f )

لدي حب غير صحي للحلقات ...

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