file - شرح - استبدال الملف القديم بملف جديد




how to make cmd batch file (2)

أحاول كتابة برنامج نصي ليحل محل محتوى الملفات القديمة بمحتوى ملفات جديد يظهر بالتنسيق التالي:

الملف القديم: someone.txt
ملف جديد: someone.txt.new

يجب استبدال الملف القديم بمحتويات ملف جديد
اسم الملف الجديد ليتم إعادة تسميته بدون جديد
يجب حذف الملف القديم

لا يعمل النص التالي: هل يمكنك إعادة كتابة:

@echo off
setlocal enabledelayedexpansion
set FOLDER_PATH=D:\test
for %%f in (%FOLDER_PATH%*) do if %%f neq %~nx0 (
    set basename=test
    ren *.txt.new !basename!.txt
)
PAUSE

لدي العديد من الملفات في مجلد وتحتاج إلى تكرار من خلال كل ملف، فقط أحتاج إلى باسنام متغير الحاجة إلى أن يتم ملؤها باسم اسم الملف القديم في كل التكرار


  1. لقد فاتتك \ في %FOLDER_PATH%\* .
  2. تريد إعادة تسمية *.new ملفات جديدة فقط، فلماذا لا تستخدم هذا النمط بدلا من * ؟ إذا كنت مهتما في ملفات مطابقة النمط *.txt.new ، ثم حدد هذا بدلا من * .
  3. ليست هناك حاجة إلى basename المتغير. ما عليك سوى استخدام %%~nf لإزالة لاحقة (الأخيرة) ( .new ).
  4. الأمر ren يلقي خطأ في حالة الملف الهدف موجود بالفعل؛ منذ كنت تريد أن يكون الكتابة فوقه، استخدم move /Y بدلا من ذلك. إضافة > nul لإخفاء الملخص تم نقل 1 file(s) moved. .
  5. إزالة الاستعلام if بعد حل البند 2.

الكل في الكل، السيناريو الخاص بك يمكن تخفيضها إلى:

@echo off
set "FOLDER_PATH=D:\test"
rem // Ensure to specify the correct pattern, `*.new` or `*.txt.new`:
for %%f in ("%FOLDER_PATH%\*.txt.new") do (
    > nul move /Y "%%~f" "%%~nf"
)
pause

@echo off
setlocal
set FOLDER_PATH=D:\test
for %%f in (%FOLDER_PATH%\*.new) do if "%%~ff" neq "%~f0" (
    ECHO move /Y "%%~ff" "%%~dpnf"
)
PAUSE

أو

@echo off
setlocal
set FOLDER_PATH=D:\test
for %%f in (%FOLDER_PATH%\*.new) do if "%%~ff" neq "%~f0" (
    if exist "%%~dpnf" ECHO del "%%~dpnf"
    ECHO rename "%%~ff" "%%~nf"
)
PAUSE

لاحظ أن أوامر العملية ( del وإعادة rename ) هي مجرد ECHO إد لأغراض التصحيح.

لاحظ أيضا أنه if "%%~ff" neq "%~f0" يمكن حذف *.new كما %~f0 امتداد .bat أو .cmd (حاول echo %~x0 %~f0 ).

الموارد (قراءة مطلوبة):







cmd