Показать полную графическую версию : Перенос файлов с папки в папку при условии
Berezkinav
21-10-2022, 15:11
Добрый день.
Просьба подсказать в написание срипта или батника.
Необходимо настроить перенос всех файлов .txt (наименования разные) с директории \EXCEPTIONS\Errors в папку \Inbound\SAFE, с условием что, в файлах .txt в которых есть значение *{2:I103* *{2:I202* *{2:I200* не переносить.
DJ Mogarych
21-10-2022, 15:38
Powershell:
dir "D:\temp\from\*.txt" |? {!(gc $_ |Select-String -SimpleMatch '*{2:I103* *{2:I202* *{2:I200*')} |mv -Destination "D:\temp\to"
Berezkinav
21-10-2022, 15:54
Подскажите пожалуйста, скопировались все файлы, т.е условия исключения не выполнилось.
(необходимо что бы .txt в которых есть одна из фраз *{2:I103* *{2:I202* *{2:I200* не переносились)
DJ Mogarych
21-10-2022, 16:01
Ну так написали бы нормально сразу, а то
в которых есть значение *{2:I103* *{2:I202* *{2:I200* не переносить »
Значение - это единственное число.
Решение для значений
*{2:I103*
*{2:I202*
*{2:I200*
dir "D:\temp\from\*.txt" |? {(gc $_) -notmatch '\*\{2:I(103|202|200)\*'} |mv -Destination "D:\temp\to"
Berezkinav
21-10-2022, 16:34
Результат последнего варианта скрипта, который Вы прислали (без переноса)
----- dir "D:\temp\from\*.txt" |? {(gc $_) -notmatch '\*\{2:I(103|202|200)\*'} |mv -Destination "D:\temp\to"
Directory: C:\text2\New1
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/20/2022 11:37 AM 668 103.TXT
-a--- 10/20/2022 2:00 PM 278 202.TXT
-a--- 10/21/2022 11:17 AM 835 asfasfaf.txt
-a--- 10/21/2022 11:19 AM 258 dfgsf.txt
-a--- 10/20/2022 6:49 PM 282 sdfsfbxc.txt
-a--- 10/21/2022 12:40 AM 538 werwer.txt
-a--- 10/21/2022 1:37 AM 537 werwrew.txt
-a--- 10/21/2022 11:47 AM 616 xcvbxcbcvn.txt
Он вывод все варианты, хотя в файлы (103 202) не должны выводится, так как в них есть одно из значений *{2:I103*
*{2:I202*
*{2:I200*
DJ Mogarych
21-10-2022, 16:38
Пришлите примеры файлов.
Berezkinav
21-10-2022, 16:45
К сожалению сами файлы прислать не могу, примеры текста файлов:
WERTYY}{2:I103G22XXXXN}
JHGBNM}{2:I199GGH3XXXN}
CLDJDMV}{2:I202D33WFXXN}
и вообще может любые символы быть указаны.
Berezkinav
21-10-2022, 17:36
Получилось справиться с перемещением, но необходимо добавить условия копирования в другую директорию (до переноса)
$RootDirectoryToCheck = 'C:\text2\New1'
$DestinationDirectory = 'C:\text2\New2'
$DestinationDirectory2 = 'C:\text2\New3'
$TextToFind = '{2:I(103|202|200)'
Get-ChildItem -Path $RootDirectoryToCheck -Filter '*.txt' -File -Recurse |
where {(Get-Content $_.FullName -TotalCount 1) -notmatch $TextToFind} |
Copy-Item -Destination $DestinationDirectory2 && Move-Item -Destination $DestinationDirectory
Можете пожалуйста проверить и подсказать, на данный момент по данному скрипту только копирует а перемещение не выполняет.
DJ Mogarych
21-10-2022, 18:54
Ну так ёлы-палы, где там звёздочки, зачем вы их давали в условии?
$files = dir "c:\temp\from\*.txt" |? {!((gc $_) -match '\{2:I(103|202|200)')}
$files |cp -Destination "D:\temp\to2"
$files |mv -Destination "D:\temp\to"
Berezkinav
24-10-2022, 09:16
Большое спасибо за помощь, скрипт работает. (не успел отписать сразу)
Последний вопрос, подскажите пожалуйста как настроить логирование в .txt файл, что бы в нем записывалась дата создания файла и его наименование? (прописали логирование он записывает дату переноса файла)
DJ Mogarych
24-10-2022, 13:06
Удобнее всего в .csv, его можно сразу в Экселе открывать.
$files |select name,creationtime |Export-Csv d:\temp\from\log.csv -delimiter ';' -NoTypeInformation -Append
Berezkinav
26-10-2022, 09:49
Большое Спасибо!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.