2009-08-12 14 views
10

मैं tf rename, PowerShell और नियमित अभिव्यक्ति का उपयोग करके TFS फ़ोल्डरों का एक समूह का पुनर्मूल्यांकन करने का प्रयास कर रहा हूं लेकिन मुझे नियमित रूप से अभिव्यक्ति है लेकिन मुझे PowerShell के साथ कुछ समस्याएं हैं क्योंकि मैंने इसके साथ अधिक समय नहीं बिताया है। यह वही है मैं एक साथ रख दिया अब तक 2.3.2 साथ एक प्रमुख 5 को बदलने के लिए है, लेकिन यह काम नहीं कर रहा:PowerShell का उपयोग करके मैं फ़ाइलों का नाम बदल सकता हूं?

dir | foreach { tf rename $_ { $_.Name -replace '^5', '2.3.2' } } 

वास्तविक परिणाम:

 
Unrecognized command option 'encodedCommand'. 
Unrecognized command option 'encodedCommand'. 
Unrecognized command option 'encodedCommand'. 
Unrecognized command option 'encodedCommand'. 
...etc. 

अद्यतन: एक

मुझे मिल गया इसके बजाय निम्नलिखित करने से थोड़ा करीब:

dir | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname } 

मेरा अगला लक्ष्य है इस रिकर्स उपनिर्देशिका को बनाने के लिए, लेकिन यह थोड़ा और चुनौतीपूर्ण लगता है (इसे dir -recurse में बदलना इसे किसी कारण से मूल फ़ोल्डर के बाद छोड़ देता है)।

+0

उत्तर नहीं पता, लेकिन एक अच्छा सवाल है। :) –

उत्तर

14

मैं 5 से पहले फिल्टर * ताकि आप केवल प्रक्रिया ऐसे नाम हैं जो 5. साथ भी प्रारंभ करें, इस मामले में के बाद से tf.exe एक PowerShell cmdlet का नहीं है, आप डॉन हैं ' एक नया नाम निर्धारित करने के लिए एक स्क्रिप्टब्लॉक का उपयोग करना चाहता हूं। बस इतना की तरह एक समूहीकरण अभिव्यक्ति का उपयोग:

dir -filter 5* | foreach { tf rename $_ ($_.Name -replace '^5', '2.3.2')} 

Btw, जब आप डिबग पैरामीटर ऐसा एक देशी EXE को पारित करने की कोशिश कर रहे यह बेहद उपयोगी PowerShell Community Extensions से echoargs.exe utilty उपयोग करने के लिए है।

6# dir -filter 5* | foreach { echoargs rename $_ { $_.Name -replace '^5', '2.3.2' } } 
Arg 0 is <rename> 
Arg 1 is <5foo.txt> 
Arg 2 is <-encodedCommand> 
Arg 3 is <IAAkAF8ALgBOAGEAbQBlACAALQByAGUAcABsAGEAYwBlACAAJwBeADUAJwAsACAAJwAyAC4AMwAuADIAJwAgAA==> 
Arg 4 is <-inputFormat> 
Arg 5 is <xml> 
Arg 6 is <-outputFormat> 
Arg 7 is <text> 
+0

धन्यवाद! उत्कृष्ट जवाब – Luke

1

इस प्रयास करें:

dir . | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname } 
4

नोट्स:: - ज्यादातर मामलों में tf.exe की कोई जरूरत

  • TFS native cmdlets है यह वही है मुझे अपने मूल दृष्टिकोण के बारे में बताया है।
  • कार्यक्षेत्र संचालन की समय जटिलता कार्यक्षेत्र में पहले से लंबित नामों की संख्या पर निर्भर करती है। टीएफएस 2005/2008 में यह रैखिक से काफी खराब है। नीचे की रेखा, आपको वास्तव में कई चेकइन में नामों को बैच करने पर विचार करना चाहिए यदि आपके पास बड़ी संख्या में आइटम हैं, अन्यथा प्रत्येक एकल "टीएफ नाम बदलें" (या cm -lets का उपयोग करते समय नया-TfsPendingChange -Rename) मिनट लेना शुरू कर देगा।
संबंधित मुद्दे