Может кто-нибудь помочь мне с этой проблемой. Мой вопрос похож на этот, но мне нужно, чтобы он работал и в подкаталогах. Пакетный файл для проверки файлов с одинаковым именем
Короче говоря, есть файлы, экспортированные из программы (расширение .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