बैच फ़ोल्डर और सबफ़ोल्डर में सभी PNG फ़ाइलों का नाम बदलें


0

मैं कई सबफ़ोल्डर्स के भीतर सभी PNG फ़ाइलों का नाम बदलने की कोशिश कर रहा हूँ। मैं क्या कर रहा हूँ पर मेरी व्याख्या के लिए नीचे देखें:

What is currently in place:
COMPANY
     SERVER1
         (Random).png
COMPANY2
     SERVER32
         (Random).png

What I want:

COMPANY
     SERVER1
         Company - Server1 - (Date PNG Modified).png
COMPANY2
     SERVER32
         Company2 - Server32 - (Date PNG Modified).png

मैं यह कैसे हासिल कर सकता हूं? जिस हिस्से से मुझे परेशानी हो रही है वह फर्स्ट और सेकेंड डाइरेक्टरी नाम के साथ-साथ उस तारीख को भी संशोधित कर रहा है जिसे मैं फाइल नाम में चिपका सकता हूं।

वर्तमान स्क्रिप्ट जो मेरे पास है:

@echo off
for /r %%D in (.) do (
  for /f "delims=" %%F in ('dir /b /A:-D "%%D\*.png"') do (
    echo ren "D:\FinalDir\%%F" "%%~nxD-VirtualBootTest-3-3-18.png"
)) >> "D:\FinalDir\RenameCommands.txt"


FOR /R "D:\OriginalDir" %%i IN (*.png) DO COPY "%%i" "D:\FinalDir"

यह अभी जो कर रहा है वह सभी पीएनजी फाइलों को फ़ोल्डर में सभी निर्देशिकाओं में इकट्ठा कर रहा है जो कि सभी फाइल का नाम बदलने के लिए एक बैच फ़ाइल का निर्माण कर रहा है जिसे वह फाइनलडिअर में कॉपी करता है। नाम बदलने का अंतिम परिणाम SERVER1-VirtualBootTest-3-3-18.png जैसा दिखेगा। मैं यह पता नहीं लगा सकता कि फ़ाइल के साथ दिनांक को कैसे बदला जाए और यह जोड़ा जाए कि फ़ाइल के ऊपर दो निर्देशिकाएं क्या हैं।

जवाबों:


0

तो इस स्क्रिप्ट को ट्रिक करना चाहिए। यह अपेक्षाकृत सरल है।

$files = Get-ChildItem $basePath -File -Filter *.png -Recurse
foreach($file in $files){
    $pathParts = $file.fullName.split('\')
    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
    $first = $pathParts[-3]
    $second = $pathParts[-2]
    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"
}

यहाँ ब्रेकडाउन हिस्सा है:

$files = Get-ChildItem $basePath -File -Filter *.png -Recurse

पहले यह आधार पथ से शुरू होने वाली सभी फाइलों को प्राप्त करता है (आपको $basepathचर को अपने पथ पर सेट करना होगा ) पुनरावर्ती रूप से संरचना के अंत तक।

foreach($file in $files){
    $pathParts = $file.fullName.split('\')
    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
    $first = $pathParts[-3]
    $second = $pathParts[-2]
    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"
}

फिर प्रत्येक फ़ाइल के लिए:

  • '\' वर्ण के आधार पर फ़ाइल का पूरा नाम (पथ और फ़ाइल नाम) विभाजित करता है।

    $pathParts = $file.fullName.split('\')

  • LastWriteTime तक पहुँचता है और इसे आपके इच्छित प्रारूप पर प्रारूपित करता है।

    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")

  • के लिए $firstऔर $secondचर यह रास्ता है कि दाईं ओर से विभाजित किया गया है पहुँच रहा है (-1 फ़ाइल नाम होगा, -2 माता पिता है, -3 कि माता-पिता की मूल और इतने पर है)।

    $first = $pathParts[-3]

    $second = $pathParts[-2]

  • वह सभी जानकारी एकत्र करता है और एकत्र की गई जानकारी के उन टुकड़ों में फ़ाइल का नाम बदल देता है।

    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.