首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类似于/F、查找/C等命令命名的文件在批处理中有问题

使用类似于/F、查找/C等命令命名的文件在批处理中有问题
EN

Stack Overflow用户
提问于 2014-05-27 05:35:48
回答 1查看 53关注 0票数 0

我已经写了一个小程序,在批处理中,带走一对PDF和一个控制文件,并将它们压缩到我们公司内的另一个团队。我最近扩展了这个程序以处理其他类型的PDF,但是这些附加类型类似于先前存在的导致我的程序出现问题的类型。

下面是我的代码:

代码语言:javascript
复制
:ZIPPAIRS
::Zips pairs -- checks for pairs first using filelist.txt
ECHO [INFO] Checking for pairs, if a pair exists, zipping it up >> %LOG%
ECHO.
ECHO Zipping all pairs from your PDFCOMPARE folder...
ECHO.
CD %DRIVE%\PDFCompareApp\PDFCOMPARE
FOR /F "delims=|" %%i IN (filelist.txt) DO (
        SETLOCAL EnableDelayedExpansion
        CD %DRIVE%\PDFCompareApp\PDFCOMPARE
        SET COMPAREZIPS="dir /b "%%i*.pdf" | find /c "%%i" "
        FOR /F %%j IN (' !COMPAREZIPS! ') DO SET X=%%j
        IF !X! EQU 2 (
                ECHO [INFO] Zipping %%i PDF's and control_file.xml >> %LOG%
                ECHO Zipping %%i PDF's and control_file.xml...
                %DRIVE%\PDFCompareApp\7-ZIP\7z a %DRIVE%\PDFCompareApp\PDFCOMPARE\%%i.zip %DRIVE%\PDFCompareApp\PDFCOMPARE\%%i*.* %DRIVE%\PDFCompareApp\PDFCOMPAREDOWNLOADED\control_file.xml
                ECHO.
                ECHO [INFO] Moving %%i PDF's >> %LOG%
                ECHO Moving %%i PDF's
                ECHO.
                MOVE %DRIVE%\PDFCompareApp\PDFCOMPARE\%%i*.pdf %DRIVE%\PDFCompareApp\PDFCOMPARE\FINISHED
                MOVE %DRIVE%\PDFCompareApp\PDFCOMPARE\%%i*.zip %DRIVE%\PDFCompareApp\PDFCOMPARE\ZIPS
            )   ELSE (
                ECHO.
                ECHO.
                ECHO [WARN] This compare %%i does not have a matching pair >> %LOG%
                ECHO This compare %%i does not have a matching pair
                ECHO.
                ECHO.
            )
SET i=""
SET j=""
SET X=""
ENDLOCAL
)

下面是filelist.txt的一个示例

代码语言:javascript
复制
2174_1_1_TEST_|
2174_1_1_TEST_SO_|
2174_1_1_ABC_|
2174_1_1_ABC_DEF_|
2174_1_1_XYZ_MNO_|
998014_YOYO_SP_|
998014_YOYO_|
998014_MAILMAN_|
998014_BATMAN_|
998014_SPIDERMAN_|
998014_CATWOMAN_|
311009_SUPERMAN_|

最后,下面是PDFCOMPARE文件夹中PDF的子集:

代码语言:javascript
复制
2174_1_1_TEST_dev.pdf
2174_1_1_TEST_qa.pdf
2174_1_1_TEST_SO_dev.pdf
2174_1_1_TEST_SO_qa.pdf

最后一个后缀可能会根据PDF来自哪个环境而改变,但此时它只能来自4个环境: dev、qa、uat、prod (如果这个信息有帮助的话)。

该程序在这一行中有问题:

代码语言:javascript
复制
SET COMPAREZIPS="dir /b "%%i*.pdf" | find /c "%%i" "

如果程序确实找到了两个同名的文件,那么这一行总是应该是2,但是根据上面的例子,当它在filelist.txt中点击filelist.txt时找到4,当它在filelist.txt中命中2174_1_1_TEST_SO_|时就会找到2。

如果有帮助,问题只存在于TEST/TEST_SO、ABC/ABC_DEF、YOYO/YOYO_SP文件中。

我尝试过很多事情(更改FOR循环、调整重定向/管道等等),但我还是会继续抓挠我的头。我相信这是很简单的事情,但是我被打败了,我也要求帮助。请帮帮我!

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-27 05:52:51

您可以更改for命令以显式搜索所需的内容。

代码语言:javascript
复制
SET "COMPAREZIPS=dir /b "%%idev.pdf" "%%iqa.pdf" "%%iuat.pdf" "%%iprod.pdf" ^| find /c "%%i" "

或者添加一个筛选器,以确保只计算出相应的文件。

代码语言:javascript
复制
SET "COMPAREZIPS=dir /b "%%i*.pdf" ^| findstr /i /r /c:"^%%i[^_]*\.pdf$" ^| find /c "%%i" "

这将解决文件计数的问题,但不会避免使用%%i*.pdf处理文件的其他命令的问题。

因此,最好首先检索将在每次迭代中处理的文件列表,然后使用此列表执行其余的命令。

代码语言:javascript
复制
:ZIPPAIRS
::Zips pairs -- checks for pairs first using filelist.txt
ECHO [INFO] Checking for pairs, if a pair exists, zipping it up >> %LOG%
ECHO.
ECHO Zipping all pairs from your PDFCOMPARE folder...
ECHO.

setlocal enableextensions disabledelayedexpansion

set "sources=dev qa uat prod"
set "tempFile=%temp%\%~nx0.%random%.tmp"
pushd "%DRIVE%\PDFCompareApp\PDFCOMPARE"
FOR /F "delims=|" %%i IN (filelist.txt) DO (
    :: Search for required files 
    dir /b "%%idev.pdf" "%%iqa.pdf" "%%iuat.pdf" "%%iprod.pdf" > "%tempFile%"
    for /f %%j in (
        ' ^<"%tempFile%" find /i /c "%%i" '
    ) do if %%j equ 2 (
        ECHO [INFO] Zipping %%i PDF's and control_file.xml >> %LOG%
        ECHO Zipping %%i PDF's and control_file.xml...
        %DRIVE%\PDFCompareApp\7-ZIP\7z a %DRIVE%\PDFCompareApp\PDFCOMPARE\%%i.zip @"%tempFile%" %DRIVE%\PDFCompareApp\PDFCOMPAREDOWNLOADED\control_file.xml
        ECHO.
        ECHO [INFO] Moving %%i PDF's >> %LOG%
        ECHO Moving %%i PDF's
        ECHO.
        for /f "usebackq delims=" %%k in ("%tempFile%") do MOVE %DRIVE%\PDFCompareApp\PDFCOMPARE\%%k %DRIVE%\PDFCompareApp\PDFCOMPARE\FINISHED
        MOVE %DRIVE%\PDFCompareApp\PDFCOMPARE\%%i*.zip %DRIVE%\PDFCompareApp\PDFCOMPARE\ZIPS
    ) else (
        ECHO.
        ECHO.
        ECHO [WARN] This compare %%i does not have a matching pair >> %LOG%
        ECHO This compare %%i does not have a matching pair
        ECHO.
        ECHO.
    )
)
popd
del /q "%tempFile%" >nul 2>nul 
endlocal
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23881711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档