Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Перенос файлов с папки в папку при условии (http://forum.oszone.net/showthread.php?t=352181)

Berezkinav 21-10-2022 15:11 2994603

Перенос файлов с папки в папку при условии
 
Добрый день.

Просьба подсказать в написание срипта или батника.

Необходимо настроить перенос всех файлов .txt (наименования разные) с директории \EXCEPTIONS\Errors в папку \Inbound\SAFE, с условием что, в файлах .txt в которых есть значение *{2:I103* *{2:I202* *{2:I200* не переносить.

DJ Mogarych 21-10-2022 15:38 2994605

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 2994608

Подскажите пожалуйста, скопировались все файлы, т.е условия исключения не выполнилось.
(необходимо что бы .txt в которых есть одна из фраз *{2:I103* *{2:I202* *{2:I200* не переносились)

DJ Mogarych 21-10-2022 16:01 2994610

Ну так написали бы нормально сразу, а то
Цитата:

Цитата Berezkinav
в которых есть значение *{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 2994618

Результат последнего варианта скрипта, который Вы прислали (без переноса)
----- 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 2994619

Пришлите примеры файлов.

Berezkinav 21-10-2022 16:45 2994621

К сожалению сами файлы прислать не могу, примеры текста файлов:
WERTYY}{2:I103G22XXXXN}



JHGBNM}{2:I199GGH3XXXN}



CLDJDMV}{2:I202D33WFXXN}
и вообще может любые символы быть указаны.

Berezkinav 21-10-2022 17:36 2994627

Получилось справиться с перемещением, но необходимо добавить условия копирования в другую директорию (до переноса)

$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 2994635

Ну так ёлы-палы, где там звёздочки, зачем вы их давали в условии?

Код:

$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 2994818

Большое спасибо за помощь, скрипт работает. (не успел отписать сразу)

Последний вопрос, подскажите пожалуйста как настроить логирование в .txt файл, что бы в нем записывалась дата создания файла и его наименование? (прописали логирование он записывает дату переноса файла)

DJ Mogarych 24-10-2022 13:06 2994831

Удобнее всего в .csv, его можно сразу в Экселе открывать.
Код:

$files |select name,creationtime |Export-Csv d:\temp\from\log.csv -delimiter ';' -NoTypeInformation -Append

Berezkinav 26-10-2022 09:49 2994972

Большое Спасибо!!


Время: 11:50.

Время: 11:50.
© OSzone.net 2001-