Как да накарам PowerShell да търси файлове в други папки при преместване на елементи?

Написах този скрипт за преместване на файлове в целевата папка. Изглежда, че пропускам нещо тук, защото когато стартирам скрипта, той търси само .zqx файлове в текущата директория, а не всички устройства. Моля, обърнете внимание, че частта (dir $paths..) връща незабавно списъка с .zqx файлове.

Paths.txt има букви на устройство като тази

C:\
D:\
E:\

$paths = get-content paths.txt
mv (dir $paths -r -fi *.zqx | ?{$_.lastwritetime -lt ($sevendaysold)}) -dest e:\xqz

person Animesh    schedule 10.01.2011    source източник


Отговори (1)


Е, един проблем, с който ще се сблъскате, е, че частта, която изчислява файловите пътища за преместване, създава само имена на файлове, а не пълни пътища. Опитайте това, за да видите за какво говоря:

$OFS="`n"
"$(dir $paths -r -fi *.zqx | ?{$_.lastwritetime -lt ($sevendaysold)})"

Параметърът Path до Move-Item приема тип [string[]], така че PowerShell преобразува резултатите от вашия dir израз в низов масив. За съжаление обектите System.IO.FileInfo изобразяват "ToString()" въз основа на името на файла, което са конструирани с IIRC.

За щастие поправката е лесна. Прехвърлете FileInfo обектите в Move-Item така:

dir $paths -r *.zqx | ?{$_.lastwritetime -lt $sevenDaysOld} | mv -dest e:\xqz
person Keith Hill    schedule 10.01.2011
comment
IMHO става дума за непоследователност. Командите трябва да дават едни и същи резултати независимо от това как се предават параметрите. Сблъсках се с подобни проблеми с Select-String connect.microsoft.com/PowerShell/feedback/details/576354/ - person stej; 11.01.2011
comment
Кийт, корекцията работи перфектно и предишното ти обяснение направи абсолютен смисъл защо моето твърдение няма да работи. Ще бъде по-внимателен към това как работи конвертирането, докато се опитвате да изпратите резултати от команда към друга команда. Благодаря! - person Animesh; 11.01.2011
comment
@Stej, да, трябва да се съглася. Това е неприятна част от сложността на обвързването на тръбопровода в PowerShell, където в този случай се обвързва по име на свойство. Ако обвърже by value, тогава ще трябва да разберат как да поправят FileInfo. Или може би bind by property name беше решението. :-) - person Keith Hill; 11.01.2011