首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理文件检查文件夹中具有其他扩展名的文件名。

批处理文件检查文件夹中具有其他扩展名的文件名。
EN

Stack Overflow用户
提问于 2020-04-22 21:50:51
回答 1查看 179关注 0票数 0

有人能帮我解决这个问题吗。我的问题是模拟这个,但我需要它也在潜艇工作。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文件的名称,那么这应该是很好的,但不是必要的。

我现在的代码是:

代码语言:javascript
复制
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

解出

最终代码:

代码语言:javascript
复制
@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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 17:38:42

尝尝这个!不过,它不会重命名这些文件。这是不必要的,因为它们将在日志文件中列出。

代码语言:javascript
复制
for /R %%a in (*.xcs) do (
    if exist %%~paerror if not exist %%~pa%%~na.pgmx (
        copy /b %%a %%~paerror
        echo %%a >> %%~palog.txt
    )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61375700

复制
相关文章

相似问题

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