คัดลอกไฟล์ตามลำดับจากหลายโฟลเดอร์ไปยังโฟลเดอร์ใหม่ (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
ทรัพยากรเพิ่มเติมและการอ่าน