Создать скрипт для сбора файлов со вчерашнего дня

Я работаю в Sterling B2B Integrator, и мне нужно создать бизнес-процесс, чтобы собирать только файлы со вчерашнего дня (предыдущей даты). Проблема в том, что у B2Bi нет службы для этого, а в каталоге для собраний имеется более чем 7000 файлов, поэтому я не могу использовать сервис GetDocInfo для сбора дат в теги, потому что Sterling может разрушиться.

Итак, я решил использовать адаптер командной строки, чтобы вызвать скрипт, который сделает это для меня. Проблема в том, что скрипт тоже не работает:

set var1=%1       /* UNC File Path */

set var2=%2       /* Source directory */

set var3=%3       /* "yesterday" date */

set var4=%4       /* save the list of files into a .txt*/

set var5=%5       /* copy the files from yesterday into this directory */

PUSHd **%var1%** & 
forfiles /p **%var2%** /s /C  " cmd /c echo @path @FDATE | findstr /m **%var3%**" > %var4% & 
for /f %%a in (**%var4%**) do copy %%a **%var5%** &

Функция: скрипт должен собрать файлы со вчерашнего дня и сохранить их в определенную директорию.

Пример:

PUSHd "\\emea\e801\Public" & 
forfiles /p _AppData\CAMS\PDFS\Digital\CertificadoCancelado /s /C  " cmd /c echo @path @FDATE | findstr /m "27/07/17"" > _Shared\_AppData\MFT\BackupSterling\temp_puente_PRO\Lista_DIGCRT02\ficherosAyer.txt & 
for /f %%a in (_Shared\_AppData\MFT\BackupSterling\temp_puente_PRO\Lista_DIGCRT02\ficherosAyer.txt) do copy %%a _Shared\_AppData\MFT\BackupSterling\temp_puente_PRO\Lista_DIGCRT02\DIGCRT02 &

Почему этот скрипт не работает?

1 ответ

Скрипт не работает, потому что он не синтаксически правильный. Что звездочки делают вокруг имен переменных.

Вот краткий скрипт PowerShell, который является ядром того, что вам нужно сделать. Он должен иметь блок Parms(). Когда вы убедитесь, что он будет правильно копировать файлы, удалите -WhatIf от Copy-Item команда.

Обратите внимание, что это не поддерживает структуру подкаталога из src_dir, Это не будет хорошо работать, если вы выбрали файлы с одинаковыми именами в разных подкаталогах.

$src_dir = 'C:\src\t'       #var2
$the_date = '2017-07-21'    #var3
$log_file = 'C:\src\xxx'    #var4
$dest_dir = 'C:\src\xxx'    #var5

if (Test-Path $log_file) { Remove-Item $log_file }

Get-ChildItem -Path $src_dir -File -Recurse |
    ForEach-Object {
        if ((Get-Date $_.LastWriteTime -Format yyyy-MM-dd) -eq $the_date) { $_.FullName }
    } |
    Tee-Object -FilePath $log_file -Append |
    Copy-Item -Destination $dest_dir -WhatIf

Если вы должны это сделать из сценария.bat, поместите приведенный выше сценарий в имя файла с .ps1 расширение, такое как Move-FilesDated.ps1, Затем вызовите его из сценария.bat.

powershell -NoProfile -File "Move-FilesDated.ps1"
Другие вопросы по тегам