2014-04-29 3 views
0

У меня есть тысячи файлов в каталоге (.pdf, .xls, .doc), и все они имеют сходное соглашение об именах («тип» всегда является постоянная строка, а именно: выставление счетов или счета-фактуры);Скрипт Powershell для перемещения файлов на основе исходного списка (.txt

AccountName _ AccountNumber _type.pdf

AccountName _ AccountNumber _type.doc

AccountName _ AccountNumber _type.xls

Задача под рукой, чтобы получить случайный список accountnames и номера счетов («тип» всегда постоянным, а именно: выставление счетов, счета-фактуры, доставка или заказ, и они варьироваться в формате) и переместить их из каталога A в каталог B. Я могу получить список в CSV-файл, чтобы соответствовать accountname_accountnumber _type.

Я пытаюсь создать скрипт powershell для ссылки на имя_имя account_accountnumber и переместить эти элементы из одного каталога A в каталог B без везения.

SAMPLE Я нашел кое-что немного проще, но я хотел, чтобы иметь возможность редактировать это, чтобы создать новый пункт назначения, и не останавливаться, если файл не найден из этого списка. Кроме того, если бы у меня был такой выбор из списка .txt, я думаю, что это будет проще, чем вставить все.

$src_dir = "C:\DirA\" 
$dst_dir = "D:\DirB-mm-dd-yyyy\" #This code requires the destination dir to already be there and I need to have the code output a new Directory, it could output based on date script run that would be amazing 

$file_list = "accountname1_accountnumber001_type", #If I can select to import csv here 
"accountname2_accountnumber002_type", 
"accountname3_accountnumber003_type", 
"accountname4_accountnumber004_type", 
"accountname5_accountnumber005_type", 
"accountname6_accountnumber006_type" 

foreach ($file in $file_list) #This errors out and stops the script if the file is not located in source and I need to have the script continue and move on, with hopefully an error output 
{ 
    move-Item $src_dir$file $dst_dir 
} 

Они могут быть любой формат файла, я пытаюсь получить код, чтобы соответствовать ТОЛЬКО ACCOUNTNAME и ACCOUNTNUMBER поскольку эти два определят точное клиента. Независимо от того, является ли он фактурой, выставлением счетов или доставкой, не имеет значения, так как они хотят, чтобы все файлы, связанные с этим клиентом, перемещались.

Для примера может быть по 4 штуки для каждой учетной записи, а формат типа может отличаться от pdf, doc и xls. Мне нужно переместить все файлы на основе их первых двух индикаторов (имя учетной записи, номер учетной записи).

alice_001_invoice.pdf

alice_001_billing.doc

alice_001_shipping.pdf

alice_001_order.xls

George_245_invoice.pdf

George_245_billing.doc

George_245_sh ipping.pdf

George_245_order.xls

Bob_876_invoice.pdf

Bob_876_billing.doc

Bob_876_shipping.pdf

Bob_876_order.XLS

Horman_482_invoice.pdf

Horman_482_billing.doc

Horman_482_shipping.pdf

Horman_482_order.xls

CSV:

AccountName, AccountNumber

Алиса, 001

Джордж, 245

Боб, +876

Horman, 482

+0

Возможно, если вы включите свой код до сих пор, мы можем помочь вам лучше. – tkokasih

+0

как насчет этого: 'cd $ SourceDir; ls * _ * _ type. * | Move-Item -Destination $ DestinationDir -WhatIf' – tkokasih

ответ

0

Как об этом:

$CurrentDate = [DateTime]::Now.ToString("MM-dd-yyyy") 
$DestinationDir = "D:\DirB-$CurrentDate" 
New-Item $DestinationDir -ItemType Directory -ErrorAction SilentlyContinue 

$AccountToMove = Import-CSV $CSVPath 
Foreach ($Account In $AccountToMove){ 
    $FilePattern = "*$($Account.AccountName)*$($Account.AccountNumber)*" 
    ls $SourceDir | Where Name -like $FilePattern | Move-Item -Destination $DestinationDir 
} 
+0

Я обязательно проверю это позже сегодня, похоже, что он должен сделать трюк =) – user3583862

0

Код часть - вы уже отредактировали от с поста - о перемещении файлов в подкаталогах не имеют смысл с вашими бизнес-правилами. Поскольку вы никогда не показываете содержимое файла CSV-образца, все это гадает.

Для облегчения обработки предположим, что у вас есть следующие исходные файлы. Отредактируйте сообщение, чтобы отобразить содержимое файла CSV и куда вы хотите переместить файлы.

C:\some\path\A\Alice_001_bill.doc 
C:\some\path\A\Alice_001_invoice.xls 
C:\some\path\A\Bob_002_invoice.pdf 
C:\some\path\A\Bob_002_invoice.doc 
C:\some\path\A\Eve_003_bill.xls 
C:\some\path\A\Eve_003_invoice.doc 
+0

Помогло ли это объяснить немного больше? – user3583862

+0

@ user3583862 Закрыть, но нет сигары. Описание назначения все еще отсутствует. Куда бы ты двигался, скажем, файлы Боба? – vonPryz

+0

Все файлы во входном тексте будут перемещены на основе имени учетной записи и номера учетной записи. Боб, Алиса, Хорман и Джордж будут переведены в новый DIR, основанный на дате исполнения сценария. Я пытаюсь выяснить, как получить этот скрипт для создания нового каталога для адресата в зависимости от даты выполнения скрипта. – user3583862

Смежные вопросы