คัดลอกไฟล์ตามลำดับจากหลายโฟลเดอร์ไปยังโฟลเดอร์ใหม่


2

ฉันใช้ Windows 10 และทำงานกับคลิปวิดีโอหลายกล้อง ฉันจะใช้ตัวอย่างเพื่ออธิบายให้ดีที่สุด

ตัวอย่าง

ฉันอยู่ระหว่างการถ่ายทำด้วยกล้อง 6 ตัวถ่ายทำฉากเดียวกันทั้งหมดในครั้งเดียว ฉันถ่ายวิดีโอและจบลงด้วยโฟลเดอร์ 6 โฟลเดอร์แยกกัน (โฟลเดอร์ต่อกล้อง) และแต่ละโฟลเดอร์มีจำนวนช็อตเท่ากันหรือ "รับ"

กล้อง "ใช้" ถูกกำหนดหมายเลขตามลำดับแม้ว่ากล้องแต่ละตัวจะมีชื่อเป็นของตัวเอง ไฟล์ในโฟลเดอร์ Camera A อาจเรียกว่า GOPR0023, GOPR0024, GOPR0025 ในขณะที่ไฟล์ในโฟลเดอร์ Camera B อาจเรียกว่า GOPRO0111, GOPR0112, GOPRO0113

ฉันต้องการ

สิ่งที่ฉันต้องการทำคือสร้างโฟลเดอร์สำหรับแต่ละโฟลเดอร์ "take" ... เช่นโฟลเดอร์~\Take1ซึ่งรวมถึง "take 1" จากกล้อง A, B, C, D, E, F, ฯลฯ

ฉันจะทำสิ่งนี้ด้วยความพยายามน้อยที่สุดใน windows 10 ได้อย่างไร เมื่อฉันมีโฟลเดอร์กล้อง 6 โฟลเดอร์โดยมี 20 โฟลเดอร์ใช้เวลาในการดำเนินการแต่ละรายการ

โดยพื้นฐานแล้วฉันต้องการเครื่องมือที่ใช้ไฟล์แรก (รับ 1) จากโฟลเดอร์กล้องแต่ละโฟลเดอร์ที่ตัดและวางลงในโฟลเดอร์ใหม่และทำซ้ำ (ใช้ลำดับ / ไฟล์ลำดับถัดไป) จนกว่าจะไม่มีไฟล์เหลืออยู่


ทำได้ด้วยไฟล์ค้างคาวหวังว่าคนที่นี่จะแสดงให้เห็นว่า
Moab

ทางออกที่ง่ายที่สุดคือการจ่ายนักพัฒนาเพื่อเขียนเครื่องมือให้คุณ (ไม่จำเป็นต้องเป็นนักพัฒนาที่มีประสบการณ์ด้วย)
Ouroborus

ทางออกที่ดีที่สุดคือการเรียนรู้ที่จะทำด้วยตัวคุณเองในขณะที่วิธีที่ง่ายที่สุดคือถามคนที่รู้ว่าพวกเขากำลังทำอะไรที่จะช่วยคุณและเชื่อถือได้ (จ่ายให้หรือไม่) ในแง่ของการจ่ายค่าบริการเทียบกับการไปที่ไซต์ถาม - ตอบหมายความว่าฉันเข้าใจความตั้งใจของคุณโดยปริยายเมื่อฉันอ่านคำถามของคุณในเว็บไซต์นี้ ด้วยห้องสมุดที่มีเครื่องมืออันแข็งแกร่งมากมายที่กำจัดนักพัฒนาแม้กระทั่งนักพัฒนาที่ไม่มีประสบการณ์ก็สามารถทำได้ดังนั้นจงเป็นหนึ่งในตัวคุณเองทำไมคุณไม่ทำเช่นนั้นคุณจึงไม่ต้องถามอีกเลย ... lol !!
Pimp Juice IT

กล้องจะใช้หมายเลขตามลำดับแม้ว่ากล้องแต่ละตัวจะมีชื่อเป็นของตนเอง (เช่นไฟล์ในกล้อง A โฟลเดอร์อาจเรียกว่า GOPR0023, GOPR0024, GOPR0025 ในขณะที่กล้องในโฟลเดอร์ B อาจเรียกว่า GOPRO0111, GOPR0112, GOPR0113) น่าเสียดายที่ขนาดไฟล์สำหรับการถ่ายแต่ละครั้งจะแตกต่างกันไปในแต่ละกล้อง สิ่งที่ฉันต้องการคือเครื่องมือที่นำไฟล์แรกจากโฟลเดอร์กล้องแต่ละโฟลเดอร์แล้วตัดและวางและวางลงในโฟลเดอร์ใหม่และทำซ้ำจนกว่าจะไม่มีไฟล์เหลืออยู่
user543144

คำตอบ:


1

คัดลอกไฟล์ตามลำดับจากหลายโฟลเดอร์ไปยังโฟลเดอร์ใหม่ (Win 10)

ฉันอยู่ระหว่างการถ่ายทำด้วยกล้อง 6 ตัวถ่ายทำฉากเดียวกันทั้งหมดในครั้งเดียว ฉันถ่ายทำวิดีโอแล้วจบด้วยโฟลเดอร์แยก 6 โฟลเดอร์ (โฟลเดอร์ต่อกล้อง) และแต่ละโฟลเดอร์มีจำนวนช็อตเท่ากันหรือ "รับ" สิ่งที่ฉันต้องการทำคือสร้างโฟลเดอร์สำหรับ "รับ" แต่ละรายการตัวอย่างเช่นโฟลเดอร์ใช้เวลา 1 ซึ่งรวมถึงถ่าย 1 จากกล้อง A, B, C, D, E, F ฯลฯ

ด้านล่างนี้เป็นสองตัวอย่างของวิธีดำเนินการสิ่งที่คุณระบุในคำถามของคุณซึ่งได้รับการยืนยันให้ทำงานตามที่คุณอธิบายในสภาพแวดล้อมการทดสอบของฉัน

หนึ่งสคริปต์จะไม่ลบไฟล์ต้นฉบับหรือไฟล์จากโฟลเดอร์แหล่งที่มาของกล้อง 6 ตัวและอีกอันหนึ่งจะลบไฟล์ต้นฉบับ - ฉันไม่แน่ใจว่าคุณต้องการลบไฟล์ต้นฉบับนั้นหลังจากนั้นหรือไม่ มีและไม่มี

คุณจะต้องเชื่อมต่อตัวแปรตามความต้องการของคุณในชุดสคริปต์ตรรกะของตัวอย่างด้านล่าง คุณจะประหยัดเหล่านี้ไปยัง (ทุกอย่างความหมายในคนใดคนหนึ่งของผู้ที่คุณตัดสินใจที่จะใช้ - แต่ละคนเป็นแฟ้มสคริปต์ / ข้อความแยกต่างหากแม้ว่า) <something>.cmdเอกสารข้อความและจากนั้นตั้งชื่อ เมื่อมันเป็นcmdไฟล์ที่มีชื่อและคุณได้เสียบตัวแปรของคุณเข้ามามันเป็นเรื่องของการดับเบิลคลิกเพื่อเปิดมันเพื่อทำสิ่งที่คุณถาม

หมายเหตุตัวแปร

ฉันได้เพิ่มความคิดเห็นให้กับชุดสคริปต์ที่อธิบายถึงตัวแปรที่คุณจะต้องตั้งค่า (แค่ตัวแปร) และชื่อโฟลเดอร์สำหรับวงวนแรกของFORแต่เพื่อชี้แจงเพิ่มเติม:

  • SET CameraRootDir=จะมีการตั้งค่าไว้ที่ไหนเพราะจะต้องตั้งค่าให้เท่ากับโฟลเดอร์ระดับพา ธ แบบเต็มซึ่งมีโฟลเดอร์กล้องทั้งหมดอยู่ มันจะสันนิษฐานพวกเขาทั้งหมดในโฟลเดอร์เดียวกันมาตรฐาน ONE และจากที่นั่นพวกเขาทั้งหมดมีโฟลเดอร์ของตัวเองเช่นCameraA, CameraBและอื่น ๆ
  • ซึ่งจะมีการระบุว่าเป็นSET TakeRootDir=นี้จะต้องมีการตั้งค่าให้เท่ากับระดับโฟลเดอร์เส้นทางแบบเต็มที่คุณต้องการTake1, Take2, Take3และอื่น ๆ โฟลเดอร์ที่จะมีชีวิตอยู่
  • ในกรณีที่คุณเห็นFOR %%C IN (ตรรกะเพียงใต้ที่คุณจะเห็นรายการที่ระบุไว้ด้านล่างของCameraA, CameraBและอื่น ๆ แต่ละอันจะมีชื่อโฟลเดอร์เดียวเท่านั้นโดยที่กล้อง # แต่ละตัวจะเป็นชื่อของชื่อโฟลเดอร์เดียวและชื่อเฉพาะที่ไม่ซ้ำใครใต้โฟลเดอร์หลักที่มีทั้งหมด เพียงแค่แทนที่แต่ละคนด้วยชื่อโฟลเดอร์กล้องที่จะบันทึกหรือบันทึกไฟล์ตามลำดับ - ออกจากคอมมา

    CameraA,CameraB,CameraC, 
    CameraD,CameraE,CameraF
    
  • หากโฟลเดอร์กล้องของคุณตั้งอยู่บนรูทของไดรฟ์ "C" เป็นC:\CameraA, C:\CameraBและอื่น ๆ คุณจะต้องแน่ใจว่าไฟล์นั้นSET CameraRootDir=C:\เหมือนกันดังนั้นมันจะเท่ากันC:\และชื่อโฟลเดอร์ด้านบน (เหนือรายการหัวข้อย่อยที่ยกมา) คุณ รายการในส่วนนั้นของตรรกะจะวนซ้ำทั้งหกในกรณีที่ช่วยให้ชัดเจน มิฉะนั้นพา ธ แบบเต็ม (หากไม่ใช่ ROOT ของไดรฟ์ "C") จะเป็นโฟลเดอร์ PARENT \ ROOT ที่มีโฟลเดอร์เหล่านั้น

  • นอกจากนี้ยังสันนิษฐานว่าไฟล์ช็อตแรกหรือไฟล์ภาพในแต่ละโฟลเดอร์กล้องที่ไม่ซ้ำกันจะเป็นTake1และถัดไปหลังจากนั้นTake2เป็นต้นไปตามลำดับนั้นดังนั้นนั่นคือวิธีที่ฉันมีชุดตรรกะในตัวอย่างด้านล่าง

หมายเหตุอื่น ๆ

โปรดสละเวลาสักครู่และดูที่นี่ ( ยอมรับคำตอบ ) เพื่อทำความคุ้นเคยกับการรับคำตอบเกี่ยวกับ Super User และชุมชน Exchange Exchange อื่น ๆ สำหรับเรื่องนั้น หากวิธีนี้ใช้ได้กับความต้องการของคุณการยอมรับคำตอบจะได้รับการชื่นชมด้วยความขอบคุณ

Batch Script No Delete

@ECHO ON
::: --// The CameraRootDir variable is the root level variable just beneath each separate camera folder name
::: --// The TakeRootDir variable will be the folder location just beneath take1, take2, and so on will be created
SET CameraRootDir=C:\Path\Cameras
SET TakeRootDir=C:\Path\CopiedTakes
IF NOT EXIST "%TakeDir%" MD "%TakeDir%"

::: --// Each item below separate by a comma is the camera folder names just beneath the root level name
::: --// You will need to replace these entries with the actual camera folder name for each of your 6 cameras
FOR %%C IN (

    CameraA,CameraB,CameraC,
    CameraD,CameraE,CameraF

) DO (

    SET TakeCount=0 
    CALL :CAMERA_MODE "%%~C"

)
GOTO EOF

:CAMERA_MODE
SET CameraDir=%CameraRootDir%\%~1
FOR /F "TOKENS=*" %%T IN (

    '"DIR /B /A-D /OD "%CameraDir%\""'

) DO (

    CALL :TakeMove "%%~T" "%~1"

)
GOTO EOF


:TakeMove
SET /A TakeCount=%TakeCount%+1
IF NOT EXIST "%TakeRootDir%\Take_%TakeCount%" MD "%TakeRootDir%\Take_%TakeCount%"
ECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"
GOTO EOF

Batch Script พร้อมลบ

@ECHO ON
::: --// The CameraRootDir variable is the root level variable just beneath each separate camera folder name
::: --// The TakeRootDir variable will be the folder location just beneath take1, take2, and so on will be created
SET CameraRootDir=C:\Path\Cameras
SET TakeRootDir=C:\Path\CopiedTakes
IF NOT EXIST "%TakeDir%" MD "%TakeDir%"

::: --// Each item below separate by a comma is the camera folder names just beneath the root level name
::: --// You will need to replace these entries with the actual camera folder name for each of your 6 cameras

FOR %%C IN (

    CameraA,CameraB,CameraC,
    CameraD,CameraE,CameraF

) DO (

    SET TakeCount=0 
    CALL :CAMERA_MODE "%%~C"

)
GOTO EXIT

:CAMERA_MODE
SET CameraDir=%CameraRootDir%\%~1
FOR /F "TOKENS=*" %%T IN (

    '"DIR /B /A-D /OD "%CameraDir%\""'

) DO (

    CALL :TakeMove "%%~T" "%~1"

)
GOTO EOF


:TakeMove
SET /A TakeCount=%TakeCount%+1
IF NOT EXIST "%TakeRootDir%\Take_%TakeCount%" MD "%TakeRootDir%\Take_%TakeCount%"
ECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"
DEL /Q /F "%CameraDir%\%~1"
GOTO EOF

ทรัพยากรเพิ่มเติมและการอ่าน


ลืมคำพูด ..... ที่เป็นประโยชน์อย่างน่าอัศจรรย์และทำงานได้อย่างสมบูรณ์ คุณเป็นตำนานที่จริงจัง ขอบคุณมากจริง ๆ ไม่ได้คาดหวังว่าใครบางคนจะใช้เวลามากในการช่วยฉัน แต่คุณทำและฉันรู้สึกขอบคุณมาก ขอบคุณเพื่อนคุณช่วยฉันได้มาก! ขอขอบคุณ.
user543144

สวัสดี LMFAO เครื่องมือนี้ยอดเยี่ยมมาก ฉันสงสัยว่าจะมีการเปลี่ยนแปลงอย่างง่ายซึ่งจะทำให้ไฟล์ถูกตัดและวางแทนที่จะคัดลอกหรือไม่ การคัดลอกเนื่องจากไฟล์มีขนาดใหญ่ใช้เวลานาน ถ้าฉันสามารถตัดและวางมันจะเร็วกว่ามาก ฉันได้ทำการวิจัยและพยายามเปลี่ยน XCOPY เป็น MOVE แต่ดูเหมือนจะไม่เหมาะกับฉัน ... ?
user543144

1
@ user543144 ให้แน่ใจว่าการทดสอบครั้งแรกในกรณี แต่ลองนี้ลบบรรทัดนี้และวางสายนี้ในสถานที่แทนECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1" MOVE /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"ฉันไม่ได้ทดสอบสิ่งนี้ดังนั้นโปรดตรวจสอบให้แน่ใจ ดูMOVEสำหรับการอ่านและการวิจัยเพิ่มเติม ECHO และทั้งหมดจะต้องถูกแทนที่ แต่นี่ควรเป็นไวยากรณ์จากสิ่งที่ฉันรวบรวม แต่ฉันจะไม่สามารถทดสอบได้ในขณะนี้ แจ้งให้เราทราบหากคุณยังมีปัญหากับมัน
Pimp Juice IT

1
@ user543144 ดูความคิดเห็นของฉันด้านบน แต่ถ้าคำสั่ง MOVE ในตำแหน่งนั้นแทนที่บรรทัดนั้นใช้งานได้คุณจะต้องลบบรรทัดออกจากสคริปต์ด้วยการลบด้วยตรรกะด้วยDEL /Q /F "%CameraDir%\%~1"เพียงแค่ลบบรรทัดนั้นเพื่อให้GOTO EOFมันอยู่ในตำแหน่งนั้น ฉันมักจะCOPYหรือXCOPYแล้วลบในกรณีที่มีปัญหาเครือข่ายดิสก์ ฯลฯ ปัญหาที่เดิมจะยังคงมีจะได้รับการคัดลอกไปในการทำงานต่อไปหรืออะไรก็ตามดังนั้นเพียงแค่รู้ว่าเป็นไปได้ที่จะเกิดขึ้นกับมากกว่าMOVE XCOPY
Pimp Juice IT

@ user543144 อย่าลังเลที่จะดูคำตอบอื่น ๆ ของฉันหากสิ่งเหล่านั้นมีประโยชน์กับคุณให้โหวตหนึ่งหรือมากกว่านั้น เพียงคลิกที่โปรไฟล์ของฉันไปที่คำตอบแล้วคุณจะเห็นคนที่ฉันตอบและฉันได้รับสคริปต์แบทช์ไม่กี่ตัวที่ฉันได้เขียนขึ้นเพื่อช่วยเหลือผู้คนในงานบางอย่าง อย่าโหวตกลุ่มพวกเขาอย่างรวดเร็วแม้ว่าจะมีเพียงหนึ่งหรือสองคนเท่านั้นมิฉะนั้นจะถูกตั้งค่าสถานะ
Pimp Juice IT

0

หากคุณไม่ต้องการติดตั้งหรือเขียนโค้ดเครื่องมือ:

  • ค้นหาข้ามต้นไม้ใน Explorer
  • จัดเรียงผลลัพธ์ตามความเหมาะสม
  • เลือกและลากและวางไฟล์ที่อยู่ด้วยกันในไดเรกทอรีเป้าหมาย

อะไรที่สะดวกสบายมากกว่านี้ต้องการซอฟต์แวร์หรือแบทช์บางอย่างซึ่งอาจมีอยู่หรืออาจไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.