2011-05-06 8 views
10
Function Move { 
    #Moves all files older than 31 days old from the Source folder to the Target 
    Get-Childitem -Path "E:\source" | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    ForEach { 
    Move-Item $_.FullName -destination "F:\target" -force -ErrorAction:SilentlyContinue 
    } 
} 

स्रोत निर्देशिका में 2-3 साल से अधिक पुरानी फ़ाइलें हैं, लेकिन जब मैं स्क्रिप्ट चलाता हूं तो लक्ष्य निर्देशिका में कुछ भी नहीं चलता है? क्या गलत है ?31 दिनों के बाद पुराने ड्राइव को

+0

यदि आप त्रुटि कार्रवाई करते हैं तो यह कोई त्रुटि उत्पन्न करता है? –

+0

क्या आपकी फ़ाइलें 'ई: \ स्रोत' में या इसके उपनिर्देशिका में हैं? बाद के मामले में 'Get-Childitem -Recurse' –

+1

FYI का उपयोग करें, जो उप निर्देशिकाओं में फ़ाइलों को स्थानांतरित नहीं करेगा। – JasonMArcher

उत्तर

16

मुझे नहीं पता कि इससे कोई फर्क पड़ता है, लेकिन $ के बजाय। यह $ _ होना चाहिए।

मैं इस स्क्रिप्ट की कोशिश की और यह मेरे लिए ठीक काम करता है:

get-childitem -Path "E:\source" | 
    where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    move-item -destination "F:\target" 

सूचना आप एक foreach पाश की जरूरत नहीं है क्योंकि वस्तुओं "पहुंचाया" चाल-मद आदेश में

+0

get-currentitem आप गेट-चाइल्डिटम का मतलब है? – JPBlanc

+0

यह मेरे लिए क्यों काम नहीं करता ... बहुत अजीब। मैंने समस्याओं से बचने के लिए प्रस्ताव के बारे में सोचा, क्योंकि हमारे पास कुछ निर्देशिकाओं में 20k + फ़ाइलें हैं .... –

+0

आपके पास कुछ विचार है? –

4

भी हो जाएगा छिपी हुई फाइलों से अवगत रहें, -Force से Get-ChildItem