Score:0

ค้นหาวิธีแทนที่ทุกอินสแตนซ์ของไฟล์ขนาดที่ไม่ใช่ศูนย์ในแผนผังไดเร็กทอรีโดยใช้แบตช์ไฟล์

ธง us

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

ตัวอย่าง เขียนทับทุกอินสแตนซ์ของ example.txt โดยที่ขนาดไฟล์ไม่เป็นศูนย์:

ง:\
\---โฟลเดอร์ย่อย1
    | example.txt <10 ไบต์>
    |
    \---โฟลเดอร์ย่อย2
        | example.txt <0 ไบต์>
        |
        \---โฟลเดอร์ย่อย1
                example.txt <20 ไบต์>

ในตัวอย่าง D:\Subfolder1\example.txt และ D:\Subfolder2\Subsubfolder1\example.txt จะถูกเขียนทับ แต่ D:\Subfolder2\example.txt จะไม่เปลี่ยนแปลง

ขอบคุณ @NiKiZe สำหรับความช่วยเหลือทั้งหมดของคุณ!

รหัสการทำงาน:

@ปิดเสียงสะท้อน

ตั้งค่า DPATH=%~dp0

สำหรับ /R "%DPATH%" %%F ใน (*** ดูด้านล่าง) ทำถ้า %%~zF จีทีอาร์ NEQ 0 CALL :NonEmptyFile "%%~F"
GOTO : EOF

:NonEmptyFile
ECHO มีไฟล์ที่ไม่ว่างเปล่า: %1
โทร :อฟ

*** แทนที่ด้วยชื่อไฟล์ที่คุณต้องการแทนที่ ต้องแน่ใจว่าใช้อักขระตัวแทนตัวเดียวที่ไหนสักแห่ง (ฉันใช้มันในนามสกุล - เช่น ถ้าฉันกำลังค้นหา example.txt ฉันจะแทนที่ * ด้วย example.t ?t)

in flag
ต้องเป็น `cmd` หรือไม่ คุณจะต้องทำการวนซ้ำและเรียกซ้ำ แต่ `for` ภายในควรจะทำได้
in flag
ฉันผิดในสิ่งที่เรียกซ้ำอย่างน้อยจากสิ่งที่ฉันเข้าใจจากคำถาม แต่อาจจะผิด? บางทีควรตรวจสอบเฉพาะ "example.txt" เท่านั้น
wb6vpm avatar
us flag
น่าเสียดาย ใช่ ฉันต้องการเพิ่มสิ่งนี้ลงในแบตช์ไฟล์ที่มีอยู่ ซึ่งฉันต้องแทนที่ไฟล์ที่มีอยู่ซึ่งได้รับการอัปเดต (ขนาดที่ไม่ใช่ศูนย์) ด้วยไฟล์ขนาด 0 ไบต์ดั้งเดิม และไฟล์นั้นอยู่ในโฟลเดอร์ย่อยหลายโฟลเดอร์ที่ สามารถเปลี่ยนแปลงได้ ดังนั้นฉันจึงไม่สามารถฮาร์ดโค้ดทุกโฟลเดอร์ (ย่อย) ที่เป็นไปได้เพื่อล้างข้อมูลและกู้คืน
Score:1
ธง in

ชุดขั้นต่ำที่เดินตามเส้นทางที่กำหนดและไฟล์ย่อยและเส้นทางย่อยทั้งหมด เรียก ไฟล์ไม่ว่างเปล่า ป้ายกำกับสำหรับทุกไฟล์ที่ไม่ว่างเปล่า

@ปิดเสียงสะท้อน

ตั้งค่า DPATH=%~dp0

FOR /R "%DPATH%" %%F IN (*) DO IF %%~zF GTR 0 CALL :NonEmptyFile "%%~F"
GOTO : EOF

:NonEmptyFile
  ECHO มีไฟล์ที่ไม่ว่างเปล่า: %1
โทร :อฟ

โดยใช้ %~1 ในฟังก์ชั่นมันจะถูกขยายและคุณสามารถใช้สิ่งที่ต้องการได้ สำเนา /Y "somefile.txt" "%~1" ไม่ได้ระบุวิธีที่คุณต้องการเขียนทับไฟล์

อีกทางเลือกหนึ่งในการสร้าง "ไฟล์ว่าง" คือ เสียงสะท้อน> "%~1"

คำอธิบาย:

  • FOR /R "%DPATH%" %%F IN (*) DO เดินทุกไฟล์
  • ถ้า %%~zF GTR 0 ถ้าขนาดไฟล์มากกว่า...
  • โทร :NonEmptyFile "%%~F" โทร :NonEmptyFile ป้ายกำกับที่มีชื่อไฟล์เป็น Escape

หากต้องการทดสอบสิ่งนี้ในทันที ให้ใช้ FOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"

ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการ สำหรับ งานจะได้รับจากการวิ่ง สำหรับ /? ใน ซม

wb6vpm avatar
us flag
ขอบคุณมาก ๆ! ฉันต้องปรับแต่งเล็กน้อยเพื่อให้ความร่วมมือ แต่สิ่งนี้ทำให้ฉันเป็นจุดเริ่มต้นที่ดีมาก!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา