דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. עזרה הדדית - מחשבים וטכנולוגיה
  4. עזרה | עזרה בכתיבת קובץ BAT פשוט

עזרה | עזרה בכתיבת קובץ BAT פשוט

מתוזמן נעוץ נעול הועבר עזרה הדדית - מחשבים וטכנולוגיה
7 פוסטים 4 כותבים 82 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אופיר123
    כתב נערך לאחרונה על ידי
    #1

    אני מעוניין להעתיק רשימה ארוכה של קבצים מתיקיה אחת לשניה ויש לי את רשימת הקבצים (נתיב מלא) באקסל
    איך ניתן לעשות זאת ע"י קובץ BAT פשוט?
    תודה.

    ע"ה דכו"עע תגובה 1 תגובה אחרונה
    0
    • א אופיר123

      אני מעוניין להעתיק רשימה ארוכה של קבצים מתיקיה אחת לשניה ויש לי את רשימת הקבצים (נתיב מלא) באקסל
      איך ניתן לעשות זאת ע"י קובץ BAT פשוט?
      תודה.

      ע"ה דכו"עע מנותק
      ע"ה דכו"עע מנותק
      ע"ה דכו"ע
      כתב נערך לאחרונה על ידי
      #2

      @אופיר123 כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

      אני מעוניין להעתיק רשימה ארוכה של קבצים מתיקיה אחת לשניה ויש לי את רשימת הקבצים (נתיב מלא) באקסל
      איך ניתן לעשות זאת ע"י קובץ BAT פשוט?
      תודה.

      אם זה באקסל ייתכן מאוד שיותר קל ע"י VBA תשאל AI איך לעשות את זה.

      צ תגובה 1 תגובה אחרונה
      1
      • ע"ה דכו"עע ע"ה דכו"ע

        @אופיר123 כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

        אני מעוניין להעתיק רשימה ארוכה של קבצים מתיקיה אחת לשניה ויש לי את רשימת הקבצים (נתיב מלא) באקסל
        איך ניתן לעשות זאת ע"י קובץ BAT פשוט?
        תודה.

        אם זה באקסל ייתכן מאוד שיותר קל ע"י VBA תשאל AI איך לעשות את זה.

        צ מנותק
        צ מנותק
        צללית
        כתב נערך לאחרונה על ידי
        #3

        @ע-ה-דכו-ע לא קשור לVBA
        צריך לשמור כ CSV ואת ההמשך - GPT כבר יסביר

        ע"ה דכו"עע תגובה 1 תגובה אחרונה
        0
        • צ צללית

          @ע-ה-דכו-ע לא קשור לVBA
          צריך לשמור כ CSV ואת ההמשך - GPT כבר יסביר

          ע"ה דכו"עע מנותק
          ע"ה דכו"עע מנותק
          ע"ה דכו"ע
          כתב נערך לאחרונה על ידי
          #4

          @צללית כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

          @ע-ה-דכו-ע לא קשור לVBA
          צריך לשמור כ CSV ואת ההמשך - GPT כבר יסביר

          גם אפשרי,
          אבל אין שום צורך, יותר קל כבר VBA.

          א תגובה 1 תגובה אחרונה
          1
          • ע"ה דכו"עע ע"ה דכו"ע

            @צללית כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

            @ע-ה-דכו-ע לא קשור לVBA
            צריך לשמור כ CSV ואת ההמשך - GPT כבר יסביר

            גם אפשרי,
            אבל אין שום צורך, יותר קל כבר VBA.

            א מנותק
            א מנותק
            אופיר123
            כתב נערך לאחרונה על ידי אופיר123
            #5

            @ע-ה-דכו-ע תודה. חסום לי AI... אם יש לך אפשרות למצוא לי את הפקודה הספציפית ב-VBA להעתקת קובץ אשמח (אני יודע VBA אבל לא יודע מה הפקודה להעתקת קובץ) אני כבר יכתוב לולאה שתעבור על כל הקבצים ותעתיק אותם.
            כשניסיתי דרך שורת הפקודה קיבלתי שגיאה והתברר לי שזה בגלל שיש עברית בנתיב הקובץ. האם מישהו יודע פיתרון?
            (אגב, אפשר גם להפעיל את שורת הפקודה דרך VBA מקור)

            א תגובה 1 תגובה אחרונה
            0
            • א אופיר123

              @ע-ה-דכו-ע תודה. חסום לי AI... אם יש לך אפשרות למצוא לי את הפקודה הספציפית ב-VBA להעתקת קובץ אשמח (אני יודע VBA אבל לא יודע מה הפקודה להעתקת קובץ) אני כבר יכתוב לולאה שתעבור על כל הקבצים ותעתיק אותם.
              כשניסיתי דרך שורת הפקודה קיבלתי שגיאה והתברר לי שזה בגלל שיש עברית בנתיב הקובץ. האם מישהו יודע פיתרון?
              (אגב, אפשר גם להפעיל את שורת הפקודה דרך VBA מקור)

              א מנותק
              א מנותק
              אלף שין
              כתב נערך לאחרונה על ידי אלף שין
              #6

              @אופיר123 כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

              אם יש לך אפשרות למצוא לי את הפקודה הספציפית ב-VBA להעתקת קובץ אשמח (אני יודע VBA אבל לא יודע מה הפקודה להעתקת קובץ) אני כבר יכתוב לולאה שתעבור על כל הקבצים ותעתיק אותם.
              כשניסיתי דרך שורת הפקודה קיבלתי שגיאה והתברר לי שזה בגלל שיש עברית בנתיב הקובץ. האם מישהו יודע פיתרון?

              הנה התשובה של גמיני

              בטח, נטפל בשאלותיך אחת אחת.


              1. העתקת קבצים מרשימה באקסל באמצעות קובץ BAT

              כדי לעשות זאת, נצטרך להשתמש בפקודת COPY או XCOPY של Windows. מכיוון שיש לך את הרשימה באקסל, הפתרון הפשוט ביותר הוא לייצר קובץ BAT מתוך האקסל עצמו.

              שלב 1: הכנת האקסל

              1. פתח את קובץ האקסל שלך.

              2. נניח שיש לך עמודה אחת (לדוגמה, עמודה A) המכילה את הנתיבים המלאים של כל הקבצים שברצונך להעתיק.

              3. בעמודה נוספת (לדוגמה, עמודה B), ניצור את פקודות ה-BAT. ב-B1, תרשום את הנוסחה הבאה:

                ="COPY """ & A1 & """ ""C:\Your\Destination\Folder\"""
                

                הסבר לנוסחה:

                • ="COPY " : מתחיל את שורת הפקודה עם הפקודה COPY.
                • """ & A1 & """: זה החלק החשוב.
                  • """: מוסיף סימן לוכב (") לפני הנתיב.
                  • & A1 &: מחבר את התוכן של תא A1 (הנתיב המלא של הקובץ).
                  • """: מוסיף סימן לוכב (") אחרי הנתיב.
                    למה שני סימני לוכב? כדי שה-Excel עצמו יפרש את הסימן לוכב כתו אמיתי ולא כחלק מנוסחה. וכדי להוסיף את הלוכבים סביב הנתיב בקובץ ה-BAT, מה שחיוני אם יש רווחים או עברית בנתיב.
                • "C:\Your\Destination\Folder\""": זהו הנתיב המלא של תיקיית היעד אליה תרצה להעתיק את הקבצים. ודא שאתה משנה את זה לנתיב הנכון שלך! הלוכבים גם כאן חיוניים.
              4. גרור את הפינה הימנית התחתונה של תא B1 כלפי מטה כדי להחיל את הנוסחה על כל שאר השורות עם הקבצים.

              שלב 2: יצירת קובץ BAT

              1. כעת, יש לך רשימה של פקודות COPY בעמודה B.
              2. סמן את כל התאים בעמודה B המכילים את הפקודות.
              3. העתק אותם (Ctrl+C).
              4. פתח את "פנקס רשימות" (Notepad).
              5. הדבק את הפקודות (Ctrl+V).
              6. שמור את הקובץ בשם כלשהו, לדוגמה copy_files.bat. חשוב מאוד: בעת השמירה, בחר "Save as type:" כ-All Files (*.*) וב-Encoding בחר ANSI או UTF-8 (אם אתה משתמש ב-UTF-8, וודא שהפקודה chcp 65001 מופיעה בראש הקובץ אם יש לך עברית).

              שלב 3: הפעלת קובץ BAT

              1. הכנס את קובץ ה-.bat שיצרת לתיקייה כלשהי (מומלץ למקם אותו בתיקייה שהיא לא תיקיית המקור או היעד).
              2. לחץ לחיצה כפולה על קובץ ה-.bat כדי להפעילו.
              3. חלון שחור ייפתח ויבצע את העתקת הקבצים.

              פתרון לבעיית העברית בשורת הפקודה:

              השימוש בלוכבים (") סביב הנתיבים בשורת הפקודה הוא הפתרון הנכון לבעיית העברית והרווחים. פקודת ה-BAT שהצגתי משתמשת בזה. אם עדיין קיבלת שגיאה, ייתכן ש:

              • קידוד (Encoding): ייתכן שקובץ ה-BAT נשמר בקידוד שאינו מתאים לעברית. נסה לשמור אותו כ- UTF-8 with BOM או ANSI. אם השתמשת ב-ANSI, אתה יכול לנסות להוסיף בראש הקובץ את הפקודה chcp 65001 אשר מפעילה את קידוד UTF-8 עבור שורת הפקודה.
              • שגיאה אחרת: בדוק היטב את הנתיבים באקסל ובקובץ ה-BAT לוודא שאין סימנים מיוחדים אחרים שאינם מטופלים כראוי, או שהנתיב לתיקיית היעד קיים.

              2. העתקת קובץ ב-VBA (Visual Basic for Applications)

              הפקודה הנפוצה ביותר להעתקת קבצים ב-VBA היא באמצעות אובייקט FileSystemObject או הפונקציה המובנית FileCopy.

              שימוש ב-FileCopy:

              זוהי הפונקציה הפשוטה ביותר.

              Sub CopySingleFile()
              
                  Dim SourceFilePath As String
                  Dim DestinationFilePath As String
                  Dim DestinationFolder As String
              
                  ' --- הגדרות ---
                  SourceFilePath = "C:\Your\Source\Folder\Hebrew File Name.docx" ' שנה לנתיב המלא של הקובץ המקור
                  DestinationFolder = "C:\Your\Destination\Folder\"          ' שנה לנתיב התיקייה היעד
              
                  ' --- יצירת הנתיב המלא לקובץ היעד ---
                  ' הפקודה FSO.GetFileName לוקחת רק את שם הקובץ מהנתיב המלא
                  ' אם אין לך FileSystemObject, ניתן להשתמש ב-Mid או InStr כדי לחלץ את שם הקובץ
                  Dim FSO As Object
                  Set FSO = CreateObject("Scripting.FileSystemObject")
                  DestinationFilePath = DestinationFolder & FSO.GetFileName(SourceFilePath)
                  Set FSO = Nothing
              
                  ' --- בדיקת קיום תיקיית יעד (אופציונלי אך מומלץ) ---
                  If Dir(DestinationFolder, vbDirectory) = "" Then
                      MsgBox "תיקיית היעד '" & DestinationFolder & "' אינה קיימת.", vbCritical
                      Exit Sub
                  End If
              
                  ' --- בדיקת קיום קובץ מקור ---
                  If Dir(SourceFilePath) = "" Then
                      MsgBox "קובץ המקור '" & SourceFilePath & "' אינו קיים.", vbCritical
                      Exit Sub
                  End If
              
                  ' --- בדיקת קיום קובץ יעד (כדי למנוע דריסה או לטפל בכך) ---
                  If Dir(DestinationFilePath) <> "" Then
                      ' כאן אתה יכול להחליט מה לעשות: לדרוס, לדלג, או לבקש אישור
                      ' למשל, לדרוס:
                      ' On Error Resume Next ' כדי לדרוס ללא הודעה
                      ' Kill DestinationFilePath ' מוחק את הקובץ הקיים
                      ' On Error GoTo 0
                      ' או לבקש אישור:
                      If MsgBox("הקובץ '" & DestinationFilePath & "' כבר קיים. האם ברצונך לדרוס אותו?", vbYesNo + vbQuestion) = vbNo Then
                          MsgBox "ההעתקה בוטלה.", vbInformation
                          Exit Sub
                      End If
                  End If
              
                  ' --- ביצוע ההעתקה ---
                  On Error GoTo ErrorHandler ' טעות בהעתקה
                  FileCopy SourceFilePath, DestinationFilePath
                  MsgBox "הקובץ הועתק בהצלחה!", vbInformation
              
                  Exit Sub
              
              ErrorHandler:
                  MsgBox "שגיאה בהעתקת הקובץ: " & Err.Description, vbCritical
              
              End Sub
              

              הסבר על הקוד:

              • SourceFilePath: הנתיב המלא לקובץ שברצונך להעתיק.
              • DestinationFolder: הנתיב לתיקייה שאליה ברצונך להעתיק.
              • FileSystemObject (FSO): אובייקט עוצמתי לניהול קבצים ותיקיות. כאן אנו משתמשים בו כדי לחלץ רק את שם הקובץ מהנתיב המלא (FSO.GetFileName) ולבנות את הנתיב המלא של קובץ היעד.
              • בדיקות קיום: מומלץ תמיד לבדוק שהתיקייה והקובץ המקוריים קיימים, וגם לטפל במצב שבו קובץ היעד כבר קיים (כדי להימנע מדריסה לא רצויה או לטפל בה כנדרש).
              • FileCopy SourceFilePath, DestinationFilePath: זו הפקודה המרכזית שמבצעת את ההעתקה.
              • On Error GoTo ErrorHandler: מנגנון טיפול בשגיאות. אם ההעתקה נכשלת (למשל, הרשאות, קובץ פתוח), הוא קופץ לפרוצדורה ErrorHandler.

              לולאה עבור כל הקבצים:

              כדי להעתיק רשימה שלמה, תצטרך לולאה שעוברת על כל שורה באקסל, מחלצת את הנתיב המלא, וקוראת לפונקציה FileCopy (או משתמשת בה בתוך הלולאה).

              Sub CopyFilesFromExcelList()
              
                  Dim ws As Worksheet
                  Dim LastRow As Long
                  Dim i As Long
                  Dim SourceFilePath As String
                  Dim DestinationFolder As String
                  Dim DestinationFilePath As String
                  Dim FSO As Object ' For FileSystemObject
                  Dim filesCopied As Long
                  Dim filesSkipped As Long
                  Dim filesError As Long
              
                  ' --- הגדרות ---
                  Set ws = ThisWorkbook.Sheets("Sheet1") ' שנה לשם הגיליון שלך
                  DestinationFolder = "C:\Your\Destination\Folder\" ' שנה לנתיב התיקייה היעד
                  ' נתיב המקור לכל הקבצים נמצא בעמודה A, החל משורה 2 (כדי לדלג על כותרת)
                  Const SourceColumn As String = "A"
                  Const StartRow As Long = 2
              
                  ' --- הכנה ---
                  Set FSO = CreateObject("Scripting.FileSystemObject")
                  filesCopied = 0
                  filesSkipped = 0
                  filesError = 0
              
                  ' --- בדיקת קיום תיקיית יעד ---
                  If Dir(DestinationFolder, vbDirectory) = "" Then
                      MsgBox "תיקיית היעד '" & DestinationFolder & "' אינה קיימת. אנא צור אותה.", vbCritical
                      Exit Sub
                  End If
              
                  ' --- מציאת השורה האחרונה עם קובץ ---
                  LastRow = ws.Cells(ws.Rows.Count, SourceColumn).End(xlUp).Row
              
                  ' --- לולאה על רשימת הקבצים ---
                  For i = StartRow To LastRow
                      SourceFilePath = Trim(ws.Cells(i, SourceColumn).Value) ' קבלת הנתיב המלא מהאקסל
              
                      ' --- בדיקות ---
                      If SourceFilePath = "" Then
                          filesSkipped = filesSkipped + 1 ' דילוג על שורות ריקות
                          GoTo NextIteration ' עבור לאיטרציה הבאה בלולאה
                      End If
              
                      ' --- חילוץ שם קובץ ובניית נתיב יעד ---
                      On Error Resume Next ' אם יש שגיאה בחילוץ שם הקובץ, דלג
                      DestinationFilePath = DestinationFolder & FSO.GetFileName(SourceFilePath)
                      If Err.Number <> 0 Then
                          ' שגיאה בחילוץ שם הקובץ, כנראה נתיב מקור לא תקין
                          filesError = filesError + 1
                          Debug.Print "שגיאה בחילוץ שם קובץ: " & SourceFilePath & " - " & Err.Description
                          Err.Clear
                          GoTo NextIteration
                      End If
                      On Error GoTo 0 ' ביטול טיפול בשגיאות נקודתי
              
                      ' --- בדיקה אם קובץ המקור קיים ---
                      If Dir(SourceFilePath) = "" Then
                          filesError = filesError + 1 ' ספר קובץ שלא נמצא כשגיאה
                          Debug.Print "קובץ מקור לא נמצא: " & SourceFilePath
                          GoTo NextIteration
                      End If
              
                      ' --- בדיקה אם קובץ היעד קיים (אם רוצים לדרוס, צריך קוד נוסף כאן) ---
                      ' כרגע, אם הקובץ קיים, FileCopy תיתן שגיאה - נטפל בה.
              
                      ' --- ביצוע ההעתקה ---
                      On Error GoTo ErrorHandlerLoop ' טיפול בשגיאות העתקה ספציפיות
                      FileCopy SourceFilePath, DestinationFilePath
                      filesCopied = filesCopied + 1
                      ' Debug.Print "הועתק: " & SourceFilePath & " ל- " & DestinationFilePath
              
                      GoTo NextIteration ' עבור לאיטרציה הבאה
              
              ErrorHandlerLoop:
                      filesError = filesError + 1
                      ' Debug.Print "שגיאה בהעתקת " & SourceFilePath & ": " & Err.Description
                      If InStr(Err.Description, "already exists") > 0 Then ' אם השגיאה היא שהקובץ קיים
                          ' כאן אפשר להוסיף לוגיקה לבדיקה אם לדרוס או לדלג
                          ' לדוגמה, אם הקובץ קיים, פשוט נדלג או נספור אותו כ-skipped/error
                           filesSkipped = filesSkipped + 1 ' לדוגמה: דלג אם קיים
                      Else
                          ' שגיאה אחרת
                      End If
                      Err.Clear ' נקה את השגיאה כדי להמשיך
              
              NextIteration:
                  Next i
              
                  ' --- סיום ---
                  MsgBox "תהליך ההעתקה הסתיים." & vbCrLf & _
                         "קבצים שהועתקו בהצלחה: " & filesCopied & vbCrLf & _
                         "קבצים שדולגו/לא נמצאו/שגיאה: " & (filesSkipped + filesError), vbInformation
              
                  Set FSO = Nothing
                  Set ws = Nothing
              
                  Exit Sub
              
              ErrorHandler: ' למקרה של שגיאות אחרות שלא מטופלות בלולאה
                  MsgBox "שגיאה כללית בתהליך: " & Err.Description, vbCritical
                  Set FSO = Nothing
                  Set ws = Nothing
              
              End Sub
              

              3. פתרון לבעיית העברית בנתיבים ב-CMD/BAT (חזרה)

              כפי שהוזכר קודם, הפתרון הנפוץ ביותר הוא שימוש בלוכבים (") סביב כל נתיב (גם המקור וגם היעד) בפקודות שורת הפקודה.

              דוגמאות:

              • ללא לוכבים (עלול להיכשל):
                COPY C:\משתמשים\שמי\מסמכים\קובץ בעברית.docx C:\יעד\קבצים חדשים\
              • עם לוכבים (הפתרון הנכון):
                COPY "C:\משתמשים\שמי\מסמכים\קובץ בעברית.docx" "C:\יעד\קבצים חדשים\"

              ב-BAT:
              הנוסחה שהצגתי באקסל למעשה יוצרת את הפקודה הנכונה עם לוכבים:
              ="COPY """ & A1 & """ ""C:\Your\Destination\Folder\"""

              ב-VBA:
              הקוד של FileSystemObject והשימוש בלוכבים גם כן:
              DestinationFilePath = DestinationFolder & FSO.GetFileName(SourceFilePath)
              ואם אתה בונה את הנתיב המלא בעצמך, וודא שיש לוכבים:
              FullDestinationPath = """" & DestinationFolder & FSO.GetFileName(SourceFilePath) & """"

              קידוד (Encoding):
              אם אתה מייצר קובץ BAT ידנית או דרך תוכנה אחרת, ודא שהקידוד הוא UTF-8 (מומלץ עם BOM) או ANSI. ניתן להוסיף את הפקודה chcp 65001 בראש קובץ ה-BAT אם הוא בקידוד UTF-8, כדי להבטיח ששורת הפקודה תפרש נכון את התווים.


              מקווה שזה עוזר! אם יש לך שאלות נוספות או שאתה נתקל בבעיה עם קוד ספציפי, אל תהסס לשאול.

              א תגובה 1 תגובה אחרונה
              1
              • א אלף שין

                @אופיר123 כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

                אם יש לך אפשרות למצוא לי את הפקודה הספציפית ב-VBA להעתקת קובץ אשמח (אני יודע VBA אבל לא יודע מה הפקודה להעתקת קובץ) אני כבר יכתוב לולאה שתעבור על כל הקבצים ותעתיק אותם.
                כשניסיתי דרך שורת הפקודה קיבלתי שגיאה והתברר לי שזה בגלל שיש עברית בנתיב הקובץ. האם מישהו יודע פיתרון?

                הנה התשובה של גמיני

                בטח, נטפל בשאלותיך אחת אחת.


                1. העתקת קבצים מרשימה באקסל באמצעות קובץ BAT

                כדי לעשות זאת, נצטרך להשתמש בפקודת COPY או XCOPY של Windows. מכיוון שיש לך את הרשימה באקסל, הפתרון הפשוט ביותר הוא לייצר קובץ BAT מתוך האקסל עצמו.

                שלב 1: הכנת האקסל

                1. פתח את קובץ האקסל שלך.

                2. נניח שיש לך עמודה אחת (לדוגמה, עמודה A) המכילה את הנתיבים המלאים של כל הקבצים שברצונך להעתיק.

                3. בעמודה נוספת (לדוגמה, עמודה B), ניצור את פקודות ה-BAT. ב-B1, תרשום את הנוסחה הבאה:

                  ="COPY """ & A1 & """ ""C:\Your\Destination\Folder\"""
                  

                  הסבר לנוסחה:

                  • ="COPY " : מתחיל את שורת הפקודה עם הפקודה COPY.
                  • """ & A1 & """: זה החלק החשוב.
                    • """: מוסיף סימן לוכב (") לפני הנתיב.
                    • & A1 &: מחבר את התוכן של תא A1 (הנתיב המלא של הקובץ).
                    • """: מוסיף סימן לוכב (") אחרי הנתיב.
                      למה שני סימני לוכב? כדי שה-Excel עצמו יפרש את הסימן לוכב כתו אמיתי ולא כחלק מנוסחה. וכדי להוסיף את הלוכבים סביב הנתיב בקובץ ה-BAT, מה שחיוני אם יש רווחים או עברית בנתיב.
                  • "C:\Your\Destination\Folder\""": זהו הנתיב המלא של תיקיית היעד אליה תרצה להעתיק את הקבצים. ודא שאתה משנה את זה לנתיב הנכון שלך! הלוכבים גם כאן חיוניים.
                4. גרור את הפינה הימנית התחתונה של תא B1 כלפי מטה כדי להחיל את הנוסחה על כל שאר השורות עם הקבצים.

                שלב 2: יצירת קובץ BAT

                1. כעת, יש לך רשימה של פקודות COPY בעמודה B.
                2. סמן את כל התאים בעמודה B המכילים את הפקודות.
                3. העתק אותם (Ctrl+C).
                4. פתח את "פנקס רשימות" (Notepad).
                5. הדבק את הפקודות (Ctrl+V).
                6. שמור את הקובץ בשם כלשהו, לדוגמה copy_files.bat. חשוב מאוד: בעת השמירה, בחר "Save as type:" כ-All Files (*.*) וב-Encoding בחר ANSI או UTF-8 (אם אתה משתמש ב-UTF-8, וודא שהפקודה chcp 65001 מופיעה בראש הקובץ אם יש לך עברית).

                שלב 3: הפעלת קובץ BAT

                1. הכנס את קובץ ה-.bat שיצרת לתיקייה כלשהי (מומלץ למקם אותו בתיקייה שהיא לא תיקיית המקור או היעד).
                2. לחץ לחיצה כפולה על קובץ ה-.bat כדי להפעילו.
                3. חלון שחור ייפתח ויבצע את העתקת הקבצים.

                פתרון לבעיית העברית בשורת הפקודה:

                השימוש בלוכבים (") סביב הנתיבים בשורת הפקודה הוא הפתרון הנכון לבעיית העברית והרווחים. פקודת ה-BAT שהצגתי משתמשת בזה. אם עדיין קיבלת שגיאה, ייתכן ש:

                • קידוד (Encoding): ייתכן שקובץ ה-BAT נשמר בקידוד שאינו מתאים לעברית. נסה לשמור אותו כ- UTF-8 with BOM או ANSI. אם השתמשת ב-ANSI, אתה יכול לנסות להוסיף בראש הקובץ את הפקודה chcp 65001 אשר מפעילה את קידוד UTF-8 עבור שורת הפקודה.
                • שגיאה אחרת: בדוק היטב את הנתיבים באקסל ובקובץ ה-BAT לוודא שאין סימנים מיוחדים אחרים שאינם מטופלים כראוי, או שהנתיב לתיקיית היעד קיים.

                2. העתקת קובץ ב-VBA (Visual Basic for Applications)

                הפקודה הנפוצה ביותר להעתקת קבצים ב-VBA היא באמצעות אובייקט FileSystemObject או הפונקציה המובנית FileCopy.

                שימוש ב-FileCopy:

                זוהי הפונקציה הפשוטה ביותר.

                Sub CopySingleFile()
                
                    Dim SourceFilePath As String
                    Dim DestinationFilePath As String
                    Dim DestinationFolder As String
                
                    ' --- הגדרות ---
                    SourceFilePath = "C:\Your\Source\Folder\Hebrew File Name.docx" ' שנה לנתיב המלא של הקובץ המקור
                    DestinationFolder = "C:\Your\Destination\Folder\"          ' שנה לנתיב התיקייה היעד
                
                    ' --- יצירת הנתיב המלא לקובץ היעד ---
                    ' הפקודה FSO.GetFileName לוקחת רק את שם הקובץ מהנתיב המלא
                    ' אם אין לך FileSystemObject, ניתן להשתמש ב-Mid או InStr כדי לחלץ את שם הקובץ
                    Dim FSO As Object
                    Set FSO = CreateObject("Scripting.FileSystemObject")
                    DestinationFilePath = DestinationFolder & FSO.GetFileName(SourceFilePath)
                    Set FSO = Nothing
                
                    ' --- בדיקת קיום תיקיית יעד (אופציונלי אך מומלץ) ---
                    If Dir(DestinationFolder, vbDirectory) = "" Then
                        MsgBox "תיקיית היעד '" & DestinationFolder & "' אינה קיימת.", vbCritical
                        Exit Sub
                    End If
                
                    ' --- בדיקת קיום קובץ מקור ---
                    If Dir(SourceFilePath) = "" Then
                        MsgBox "קובץ המקור '" & SourceFilePath & "' אינו קיים.", vbCritical
                        Exit Sub
                    End If
                
                    ' --- בדיקת קיום קובץ יעד (כדי למנוע דריסה או לטפל בכך) ---
                    If Dir(DestinationFilePath) <> "" Then
                        ' כאן אתה יכול להחליט מה לעשות: לדרוס, לדלג, או לבקש אישור
                        ' למשל, לדרוס:
                        ' On Error Resume Next ' כדי לדרוס ללא הודעה
                        ' Kill DestinationFilePath ' מוחק את הקובץ הקיים
                        ' On Error GoTo 0
                        ' או לבקש אישור:
                        If MsgBox("הקובץ '" & DestinationFilePath & "' כבר קיים. האם ברצונך לדרוס אותו?", vbYesNo + vbQuestion) = vbNo Then
                            MsgBox "ההעתקה בוטלה.", vbInformation
                            Exit Sub
                        End If
                    End If
                
                    ' --- ביצוע ההעתקה ---
                    On Error GoTo ErrorHandler ' טעות בהעתקה
                    FileCopy SourceFilePath, DestinationFilePath
                    MsgBox "הקובץ הועתק בהצלחה!", vbInformation
                
                    Exit Sub
                
                ErrorHandler:
                    MsgBox "שגיאה בהעתקת הקובץ: " & Err.Description, vbCritical
                
                End Sub
                

                הסבר על הקוד:

                • SourceFilePath: הנתיב המלא לקובץ שברצונך להעתיק.
                • DestinationFolder: הנתיב לתיקייה שאליה ברצונך להעתיק.
                • FileSystemObject (FSO): אובייקט עוצמתי לניהול קבצים ותיקיות. כאן אנו משתמשים בו כדי לחלץ רק את שם הקובץ מהנתיב המלא (FSO.GetFileName) ולבנות את הנתיב המלא של קובץ היעד.
                • בדיקות קיום: מומלץ תמיד לבדוק שהתיקייה והקובץ המקוריים קיימים, וגם לטפל במצב שבו קובץ היעד כבר קיים (כדי להימנע מדריסה לא רצויה או לטפל בה כנדרש).
                • FileCopy SourceFilePath, DestinationFilePath: זו הפקודה המרכזית שמבצעת את ההעתקה.
                • On Error GoTo ErrorHandler: מנגנון טיפול בשגיאות. אם ההעתקה נכשלת (למשל, הרשאות, קובץ פתוח), הוא קופץ לפרוצדורה ErrorHandler.

                לולאה עבור כל הקבצים:

                כדי להעתיק רשימה שלמה, תצטרך לולאה שעוברת על כל שורה באקסל, מחלצת את הנתיב המלא, וקוראת לפונקציה FileCopy (או משתמשת בה בתוך הלולאה).

                Sub CopyFilesFromExcelList()
                
                    Dim ws As Worksheet
                    Dim LastRow As Long
                    Dim i As Long
                    Dim SourceFilePath As String
                    Dim DestinationFolder As String
                    Dim DestinationFilePath As String
                    Dim FSO As Object ' For FileSystemObject
                    Dim filesCopied As Long
                    Dim filesSkipped As Long
                    Dim filesError As Long
                
                    ' --- הגדרות ---
                    Set ws = ThisWorkbook.Sheets("Sheet1") ' שנה לשם הגיליון שלך
                    DestinationFolder = "C:\Your\Destination\Folder\" ' שנה לנתיב התיקייה היעד
                    ' נתיב המקור לכל הקבצים נמצא בעמודה A, החל משורה 2 (כדי לדלג על כותרת)
                    Const SourceColumn As String = "A"
                    Const StartRow As Long = 2
                
                    ' --- הכנה ---
                    Set FSO = CreateObject("Scripting.FileSystemObject")
                    filesCopied = 0
                    filesSkipped = 0
                    filesError = 0
                
                    ' --- בדיקת קיום תיקיית יעד ---
                    If Dir(DestinationFolder, vbDirectory) = "" Then
                        MsgBox "תיקיית היעד '" & DestinationFolder & "' אינה קיימת. אנא צור אותה.", vbCritical
                        Exit Sub
                    End If
                
                    ' --- מציאת השורה האחרונה עם קובץ ---
                    LastRow = ws.Cells(ws.Rows.Count, SourceColumn).End(xlUp).Row
                
                    ' --- לולאה על רשימת הקבצים ---
                    For i = StartRow To LastRow
                        SourceFilePath = Trim(ws.Cells(i, SourceColumn).Value) ' קבלת הנתיב המלא מהאקסל
                
                        ' --- בדיקות ---
                        If SourceFilePath = "" Then
                            filesSkipped = filesSkipped + 1 ' דילוג על שורות ריקות
                            GoTo NextIteration ' עבור לאיטרציה הבאה בלולאה
                        End If
                
                        ' --- חילוץ שם קובץ ובניית נתיב יעד ---
                        On Error Resume Next ' אם יש שגיאה בחילוץ שם הקובץ, דלג
                        DestinationFilePath = DestinationFolder & FSO.GetFileName(SourceFilePath)
                        If Err.Number <> 0 Then
                            ' שגיאה בחילוץ שם הקובץ, כנראה נתיב מקור לא תקין
                            filesError = filesError + 1
                            Debug.Print "שגיאה בחילוץ שם קובץ: " & SourceFilePath & " - " & Err.Description
                            Err.Clear
                            GoTo NextIteration
                        End If
                        On Error GoTo 0 ' ביטול טיפול בשגיאות נקודתי
                
                        ' --- בדיקה אם קובץ המקור קיים ---
                        If Dir(SourceFilePath) = "" Then
                            filesError = filesError + 1 ' ספר קובץ שלא נמצא כשגיאה
                            Debug.Print "קובץ מקור לא נמצא: " & SourceFilePath
                            GoTo NextIteration
                        End If
                
                        ' --- בדיקה אם קובץ היעד קיים (אם רוצים לדרוס, צריך קוד נוסף כאן) ---
                        ' כרגע, אם הקובץ קיים, FileCopy תיתן שגיאה - נטפל בה.
                
                        ' --- ביצוע ההעתקה ---
                        On Error GoTo ErrorHandlerLoop ' טיפול בשגיאות העתקה ספציפיות
                        FileCopy SourceFilePath, DestinationFilePath
                        filesCopied = filesCopied + 1
                        ' Debug.Print "הועתק: " & SourceFilePath & " ל- " & DestinationFilePath
                
                        GoTo NextIteration ' עבור לאיטרציה הבאה
                
                ErrorHandlerLoop:
                        filesError = filesError + 1
                        ' Debug.Print "שגיאה בהעתקת " & SourceFilePath & ": " & Err.Description
                        If InStr(Err.Description, "already exists") > 0 Then ' אם השגיאה היא שהקובץ קיים
                            ' כאן אפשר להוסיף לוגיקה לבדיקה אם לדרוס או לדלג
                            ' לדוגמה, אם הקובץ קיים, פשוט נדלג או נספור אותו כ-skipped/error
                             filesSkipped = filesSkipped + 1 ' לדוגמה: דלג אם קיים
                        Else
                            ' שגיאה אחרת
                        End If
                        Err.Clear ' נקה את השגיאה כדי להמשיך
                
                NextIteration:
                    Next i
                
                    ' --- סיום ---
                    MsgBox "תהליך ההעתקה הסתיים." & vbCrLf & _
                           "קבצים שהועתקו בהצלחה: " & filesCopied & vbCrLf & _
                           "קבצים שדולגו/לא נמצאו/שגיאה: " & (filesSkipped + filesError), vbInformation
                
                    Set FSO = Nothing
                    Set ws = Nothing
                
                    Exit Sub
                
                ErrorHandler: ' למקרה של שגיאות אחרות שלא מטופלות בלולאה
                    MsgBox "שגיאה כללית בתהליך: " & Err.Description, vbCritical
                    Set FSO = Nothing
                    Set ws = Nothing
                
                End Sub
                

                3. פתרון לבעיית העברית בנתיבים ב-CMD/BAT (חזרה)

                כפי שהוזכר קודם, הפתרון הנפוץ ביותר הוא שימוש בלוכבים (") סביב כל נתיב (גם המקור וגם היעד) בפקודות שורת הפקודה.

                דוגמאות:

                • ללא לוכבים (עלול להיכשל):
                  COPY C:\משתמשים\שמי\מסמכים\קובץ בעברית.docx C:\יעד\קבצים חדשים\
                • עם לוכבים (הפתרון הנכון):
                  COPY "C:\משתמשים\שמי\מסמכים\קובץ בעברית.docx" "C:\יעד\קבצים חדשים\"

                ב-BAT:
                הנוסחה שהצגתי באקסל למעשה יוצרת את הפקודה הנכונה עם לוכבים:
                ="COPY """ & A1 & """ ""C:\Your\Destination\Folder\"""

                ב-VBA:
                הקוד של FileSystemObject והשימוש בלוכבים גם כן:
                DestinationFilePath = DestinationFolder & FSO.GetFileName(SourceFilePath)
                ואם אתה בונה את הנתיב המלא בעצמך, וודא שיש לוכבים:
                FullDestinationPath = """" & DestinationFolder & FSO.GetFileName(SourceFilePath) & """"

                קידוד (Encoding):
                אם אתה מייצר קובץ BAT ידנית או דרך תוכנה אחרת, ודא שהקידוד הוא UTF-8 (מומלץ עם BOM) או ANSI. ניתן להוסיף את הפקודה chcp 65001 בראש קובץ ה-BAT אם הוא בקידוד UTF-8, כדי להבטיח ששורת הפקודה תפרש נכון את התווים.


                מקווה שזה עוזר! אם יש לך שאלות נוספות או שאתה נתקל בבעיה עם קוד ספציפי, אל תהסס לשאול.

                א מנותק
                א מנותק
                אופיר123
                כתב נערך לאחרונה על ידי אופיר123
                #7

                @אלף-שין תודה רבה.
                בדקתי את הפתרון עם הגירשיים עבור שורת הפקודה והוא לא עובד.


                עריכה:

                @אלף-שין כתב בעזרה | עזרה בכתיבת קובץ BAT פשוט:

                ניתן להוסיף את הפקודה chcp 65001 בראש קובץ ה-BAT אם הוא בקידוד UTF-8, כדי להבטיח ששורת הפקודה תפרש נכון את התווים.

                זה עזר לי בשילוב הגירשיים.
                תודה רבה.

                תגובה 1 תגובה אחרונה
                0

                • התחברות

                • אין לך חשבון עדיין? הרשמה

                • התחברו או הירשמו כדי לחפש.
                • פוסט ראשון
                  פוסט אחרון
                0
                • חוקי הפורום
                • פופולרי
                • לא נפתר
                • משתמשים
                • חיפוש גוגל בפורום
                • צור קשר