البرمجة النصية الدفعية، لاستخدام نتائج دير
-
19-09-2019 - |
سؤال
أحاول كتابة برنامج نصي دفعة صغيرة سيؤدي إلى حذف الملفات القديمة من الدليل. المعلمة الأولى هي دليل البرنامج النصي للنظر فيها، والثاني هو عدد الملفات للحفاظ على.
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 )
لدي حب غير صحي للحلقات ...