मैं जानना चाहूंगा कि कैसे मैं केवल एक अनुक्रम के साथ एक विशिष्ट फ़ोल्डर से फ़ाइलों का नाम बदल सकता हूं और पावरशेल में संख्याओं को कम कर सकता हूं। जैसे Folder1: pag_001.jpg, pag_003.jpg, pag_005.jpg.... pag_201.jpg
, Folder2: pag_002.jpg, pag_004.jpg, pag_006.jpg.... pag_200.jpg
। ऐसा इसलिए है क्योंकि मेरे पास एक दस्तावेज़ है जो पहले पृष्ठों को स्कैन किया गया था और दूसरे पेजों को भी स्कैन किया गया था, इसलिए उनकी फ़ाइल के नाम 1 से 201 तक लगातार क्रम में हैं। फिर मैंने उन आधे फाइलों को अलग कर दिया, जो एक नए पेज में हैं जगह: Folder1
, और दूसरी छमाही, Folder2
में भी पृष्ठ। इसीलिए मैं पहले नामों को बदलना चाहूंगा और फिर से उनके नए नामों के साथ जुड़ूंगा।
मैंने इसे समान पोस्ट :
फिलहाल मैं इस तरह भी कई क्रम उत्पन्न कर सकता है:
ForEach ($number in 1..100 ) { $number * 2}
और विषम संख्याएँ जैसे:
ForEach ($number in 0..100 ) { $number *2+1}
और मेरी फ़ाइलों का नाम बदलने से पहले उत्पन्न दृश्यों को लागू करना चाहता था:
cd C:\test\Folder1
$i = $number * 2
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('pag_{0:D3}.jpg' -f $i++)}
लेकिन यह काम नहीं करता है! किसी भी सुझाव का स्वागत है
सादर,
2 जवाब
आपका $i++
हर बार 1
जोड़ता है, यही कारण है कि यह संख्याओं को भी जोड़ता है,
आप विषम संख्याओं की सारणी बना सकते हैं और फिर $i++
का उपयोग करके इस तरह से किसी एक आइटम को चरण में रख सकते हैं:
$path = "C:\test\Folder1"
$oddNumbersArray = 0..100 | % {$_ *2 +1}
$i = 0
Get-ChildItem $path -Filter *.jpg | % {Rename-Item $_ -NewName ("pag_$($oddNumbersArray[$i]).jpg") ;$i++}
सम संख्याओं के लिए $oddNumbersArray
लाइन को {$_ *2}
में बदलें
ऐसा करने के तरीकों का गुच्छा। खान के लिए हम प्रत्येक इंडेक्स को एक सदस्य के रूप में जोड़ते हैं ताकि यह नामांकित आइटम स्क्रिप्ट ब्लॉक में अधिक आसानी से सुलभ हो सके।
$index = 0
Get-ChildItem $path -Filter "*.jpg" | ForEach-Object{
$index = $index +2
$_ | Add-Member -Name "Index" -MemberType NoteProperty -Value $index -PassThru
} | Rename-Item -NewName {'pag_{0:D3}.jpg' -f $_.Index} -WhatIf
{{X 1}} Add-Member
का उपयोग करके हम सूचकांक के मूल्य को अद्यतन करते हैं और फिर इसे उसी नाम की संपत्ति के रूप में जोड़ते हैं। फिर आपके rename-item
स्क्रिप्टब्लॉक में हम उस प्रॉपर्टी को कॉल कर सकते हैं। -WhatIf
को निकालने के बाद आप सत्यापित करें कि नए नाम वही हैं जो आप चाहते थे। क्रमशः और विषम के लिए 0 और -1 के बीच $index
स्विच करें।
ग्लोबल इंडेक्स वैरिएबल का उपयोग करने वाली एक अन्य विधि और Rename-Item
उपयोग किए जाने वाले पाइपलाइन वैरिएबल बनाने के लिए परिकलित गुणों का उपयोग करके पाइपलाइन को कम करना।
$path = "C:\Temp\csv"
$global:index = 0 # Use -1 for odd
Get-ChildItem $path -Filter "*.csv" |
Select-Object @{Name="Path";Expression={$_.FullName}},
@{Name="NewName";Expression={$global:index = $global:index + 2; 'pag_{0:D3}.jpg' -f $global:index}} |
Rename-Item -WhatIf