Batch File - Создать Zip-файл с командной строкой, используя первую часть первого имени файла - PullRequest
0 голосов
/ 17 мая 2019

У меня есть папка PDF-файлов, которые имеют согласованное соглашение об именах. Я хочу создать zip-файл из этих PDF-файлов, но назвал zip-файл, используя ту часть файла, которая находится перед @ - все файлы одинаковы спереди (это NTID пользователя, который создал PDF файлы).

Например, вот как файлы могут выглядеть в выходной папке PDF (может быть до 100 файлов, которые начинаются с одного и того же идентификатора пользователя до @:

Идентификатор_пользователь @ Карлос Альберто + + + Mafra- взяточничество-2019-05-16

Идентификатор_пользователь @ MAJELA + HOSPITALAR + LTDA- + взяточничество-2019-05-16

(в идеале я бы хотел, чтобы текущая дата добавлялась в zip-файл) Почтовый индекс должен называться UserID-2019-05-16.zip на основе приведенного выше примера.

Это код, который я пытаюсь использовать, но безуспешно ...

Я создал пакетный скрипт, используя другие предложения для каждого шага. но не могу заставить его работать от начала до конца.

FOR %%F IN ("C:\Users\SA-JJC-HCC_Ops\OneDrive - JNJ\workflows\TPIGoogle\pdf\*.pdf") DO (
 set filename=%%F
 goto next
)
:next
echo "%filename%"

set zipfile=%filename%
for /f "tokens=1 delims=@" %%a in ("%zipfile%") do (

)
cd "C:\Program Files\7-Zip\"
7z.exe" a "C:\Users\SA-JJC-HCC_Ops\JNJ\HCC&P Alteryx - Documents\EPiC\GoogleSearches\zip\" && %zipfile% && ".zip" "C:\Users\SA-JJC-HCC_Ops\OneDrive - JNJ\workflows\TPIGoogle\pdf\*.pdf"

Один zip-файл со всеми файлами PDF, которые используют первую часть строки из имен файлов в папке PDF.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Если это действительно текущая дата, которую вы хотите добавить в конец zip-файла, тогда нам нужно получить не зависящие от локали дату и время.Затем будут скопированы все PDF-файлы, которые начинаются с UserID, в zip-архив с датой дня, когда вы запустили скрипт UserID-2019-05-17:

@echo off
set "outDir=C:\Users\SA-JJC-HCC_Ops\JNJ\HCC&P Alteryx - Documents\EPiC\GoogleSearches\zip\"
set "inDir=C:\Users\SA-JJC-HCC_Ops\OneDrive - JNJ\workflows\TPIGoogle\pdf\"
for /f "tokens=1,2 delims==" %%i in ('wmic os get LocalDateTime /VALUE') do (
    if ".%%i."==".LocalDateTime." set mydate=%%j
)
set mydate=%mydate:~0,4%-%mydate:~4,2%-%mydate:~6,2%

for %%a in (*.pdf) do for /f "delims=@" %%i in ('dir /b /a-d %%a') do (
    "C:\Program Files\7-Zip\7z" a "%outDir%%%i-%mydate%.zip" "%inDir%%%~a"
)

Если на самом деле вы хотите добавить датувместо имени файла (другими словами, создайте Zip-файлы для каждого файла с другой датой и соответствующим идентификатором пользователя):

@echo off
setlocal enabledelayedexpansion
set "outDir=C:\Users\SA-JJC-HCC_Ops\JNJ\HCC&P Alteryx - Documents\EPiC\GoogleSearches\zip\"
set "inDir=C:\Users\SA-JJC-HCC_Ops\OneDrive - JNJ\workflows\TPIGoogle\pdf\"
for %%a in (*.pdf) do for /f "tokens=1,* delims=@" %%i in ('dir /b /a-d %%a') do (
    set fdate=%%~nj
    set fdate=!fdate:~-10!
    echo "C:\Program Files\7-Zip\7z" a "%outDir%%%i-!fdate!.zip "%inDir%%%~a"
)
0 голосов
/ 17 мая 2019
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=U:\sourcedir\t w o"
SET "destdir=U:\destdir"

FOR /f "tokens=1*delims=@" %%a IN (
 'dir /b /a-d "%sourcedir%\*@*-????-??-??.pdf" '
 ) DO (
 SET "pre=%%~a"
 SET "post=%%~nb"
 SET "post=!post:~-10!"
 IF DEFINED post ECHO "C:\Program Files\7-Zip\7z" a "%destdir%\!pre!-!post!.zip" "%sourcedir%\%%~a@%%~b"
 IF NOT DEFINED post ECHO SKIP "%%~a@%%~b"
)

GOTO :EOF

Вам необходимо изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами.

Я использовал имена переменных pre и post, чтобы гарантировать, что имена, используемые в этом процессе, не являются ключевыми словами, такими как более логичные date.

Чтение списка всех имен файлов, соответствующих шаблону *@*-????-??-??.pdf в исходном каталоге, с маркировкой @. Присвойте идентификатор пользователя %%a, а затем - pre, а часть "name" в dregs фактического имени файла - post, затем выберите только последние 10 символов post, используя замедленное расширение.

Здесь есть возможность для дальнейшей обработки post, чтобы проверить, действительно ли она соответствует шаблону для даты, если это требуется. Эта подпрограмма может вернуть post либо unmoled, либо empty . Если оно не пустое, то создайте требуемую команду 7z (вы можете добавить -tzip) и echo для проверки - удалите echo, чтобы активировать сжатие 7z. Если post очищено с помощью процедуры проверки шаблона , то имя файла будет просто указано как пропущенное.

...