有人能帮我解决这个问题吗。我的问题是模拟这个,但我需要它也在潜艇工作。Batch file to check files with same name
因此,简而言之,有一些文件从程序(.XCS扩展名)导出到具有子文件夹的文件夹中。首先,我调用一个工具(x转换器)来转换pgmx中的文件。然后,我想检查是否生成了pgmx文件,因为如果XCS内部有错误,转换器将不会生成PGMX。所以验证是这样的,test1.xcs进入,我想检查在转换后test1.pgmx是否在文件夹中出现。如果不生成pgmx文件,则必须将相应的xcs移动到位于xcs所在文件夹内的“error”文件夹,并在移动它们后具有.err扩展名,因此文件显然不正常。
我搜索了几个小时,如果文件夹中只有一个文件,下面这样的代码可以工作,但是当有更多的xcs文件没有生成pgmx时,批处理会给出“路径未找到”错误,因为它似乎搜索已经复制到“error”文件夹中的xcs文件。
此外,如果批处理可以创建一个日志文件(txt),其中包含没有转换为pgmx的XCS文件的名称,那么这应该是很好的,但不是必要的。
我现在的代码是:
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发布于 2020-04-23 17:38:42
尝尝这个!不过,它不会重命名这些文件。这是不必要的,因为它们将在日志文件中列出。
for /R %%a in (*.xcs) do (
if exist %%~paerror if not exist %%~pa%%~na.pgmx (
copy /b %%a %%~paerror
echo %%a >> %%~palog.txt
)
)https://stackoverflow.com/questions/61375700
复制相似问题