我有一个具有一致命名约定的PDF文件文件夹。我想为这些PDF文件创建一个zip文件,但使用@之前的文件部分命名该zip文件-所有文件的开头都相同(这是创建该文件的用户的NTID pdf文件)。
作为示例,这些是PDF输出文件夹中的文件的样子(@之前可能有100个文件都以相同的UserID开头。
UserID @ Carlos + Alberto + Mafra- + bribery-2019-05-16
UserID @ MAJELA + HOSPITALAR + LTDA- + bribery-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文件夹中文件名中的字符串的第一部分。
答案 0 :(得分:0)
@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
匹配的所有文件名列表,并在@
上标记。将用户ID分配给%%a
,然后将其分配给pre
,并将实际文件名的残渣的“名称”部分分配给post
,然后仅选择post
的最后10个字符使用延迟扩展。
如果需要的话,这里有机会进一步处理post
,以检查它是否确实适合日期格式。该例程可能会返回post
不受干扰或空。如果不为空,则构造所需的7z
命令(您可能希望添加-tzip
)和echo
进行验证-移除echo
以启动{{1}压缩。如果7z
被模式检查例程清空,则文件名将被简单地报告为已被跳过。
答案 1 :(得分:0)
如果确实是当前日期,您想附加到zip文件的末尾,那么我们需要获取与语言环境无关的日期和时间。然后,这会将每个以UserID开头的pdf文件复制到一个带有运行脚本UserID-2019-05-17
的日期的zip文件:
@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"
)