Пакетный файл проверяет то же имя файла с другим расширением в папках - PullRequest
0 голосов
/ 23 апреля 2020

Может кто-нибудь помочь мне с этой проблемой. Мой вопрос похож на этот, но мне нужно, чтобы он работал и в подкаталогах. Пакетный файл для проверки файлов с одинаковым именем

Короче говоря, есть файлы, экспортированные из программы (расширение .XCS) в папку с подпапками. Сначала я вызываю инструмент (xconverter) для преобразования файлов в pgmx. И затем я хочу проверить, генерируется ли файл PGMX, потому что, если в XCS есть ошибка, конвертер не сделает pgmx. Таким образом, проверка выполняется следующим образом: входит test1.xcs, и я хочу проверить, появляется ли test1.pgmx в папке после преобразования. Если файл pgmx не сгенерирован, соответствующие xcs должны быть перемещены в папку «error», которая находится внутри папки, где находился xcs, и имеет расширение .err после их перемещения, поэтому становится ясно, что файл не в порядке.

Я искал несколько часов, код, подобный приведенному ниже, работает, если в папках есть только один файл, но в тот момент, когда появляется больше файлов xcs, где pgmx не генерируется, пакет выдает ошибки «путь не найден», потому что кажется для поиска файлов xcs, которые уже скопированы в папку «error».

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

Код, который у меня сейчас есть:

set PROG=C:\Program Files (x86)\SCM Group\Maestro\XConverter.exe
set TOOL=C:\Program Files (x86)\SCM Group\Maestro\tlgx\def.tlgx
set DIR=%%~df%%~pf
set ERF=Error
set MoveToFolder=%DIR%%ERF%\

echo Delete old pgmx files

DEL /S /Q *.pgmx

echo start conversion

for /R %%f in (*.xcs) do (
                echo "%%f"
Call "%PROG%" ^
-s -m 3  ^
-i "%%f" -t "%TOOL%" -o "%DIR%%%~nf.pgmx" -m 0^              

PushD %DIR%
For /f "delims=" %%Z in ('Dir /B *.xcs') Do (
  Set "FoundPgmx="
  For /f "delims=" %%P in (
    'Dir /B "%%~nZ*" ^| findstr /i "\.pgmx$" '
  ) Do Set FoundPgmx=yes
  If not defined FoundPgmx (
    echo Error in %%f
    if not exist %MoveToFolder% md %MoveToFolder%
    move %%Z "%MoveToFolder%%%~nf.err" )
PopD
)
)

echo pgmx created

решено


Окончательный код:

@ECHO OFF

Title XCS 2 PGMX

set PROG=C:\Program Files (x86)\SCM Group\Maestro\XConverter.exe
set TOOL=U:\Accord 25\Tlgx\def.tlgx

echo ----------
echo start Conversion
echo ----------

DEL /S /Q *.pgmx

for /R %%f in (*.xcs) do (
                echo "%%f"
Call "%PROG%" ^
-s -m 3  ^
-i "%%f" -t "%TOOL%" -o "%%~pf%%~nf.pgmx" -m 0^              
                )

echo ----------
echo PGMX Generated
echo ----------
echo ----------
echo Start verification
echo ----------


DEL /S /Q errorlog.txt
rmdir /s /Q "%~dp0\error"

md error

SETLOCAL ENABLEDELAYEDEXPANSION

for /R %%a in (*.xcs) do (
    if not exist %%~pa%%~na.pgmx (
    SET CDIR=%%~pa%
    SET _CDIR=!CDIR:~1,-1!
    for %%i in ("!_CDIR!") do (SET ParentFolderName=%%~nxi
        move "%%a" "%~dp0error\!ParentFolderName!_%%~na.err" 
        echo %%a >> %~dp0errorlog.txt
   ) 
  )
 )

ENDLOCAL

DEL /S /Q *.xcs

cd %~dp0/error
ren *.err *.xcs
cd ..
rmdir "%~dp0/error"

timeout -t 5

1 Ответ

0 голосов
/ 23 апреля 2020

Попробуй это! Однако файлы не переименовываются. В этом нет необходимости, поскольку они будут перечислены в файле журнала.

for /R %%a in (*.xcs) do (
    if exist %%~paerror if not exist %%~pa%%~na.pgmx (
        copy /b %%a %%~paerror
        echo %%a >> %%~palog.txt
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...