windows - 批处理文件检查文件夹中具有其他扩展名的相同文件名
问题描述
有人可以帮我解决这个问题。我的问题与这个问题类似,但我需要它也可以在子目录中工作。 批处理文件检查同名文件
简而言之,有些文件从程序(.XCS 扩展名)导出到带有子文件夹的文件夹中。首先,我调用一个工具(xconverter)来转换 pgmx 中的文件。然后我想检查是否生成了 PGMX 文件,因为如果 XCS 内部出现错误,转换器将不会生成 pgmx。所以验证是这样的,test1.xcs进去了,我想看看转换后文件夹里面有没有test1.pgmx出来。如果未生成 pgmx 文件,则必须将相应的 xcs 移动到 xcs 所在文件夹内的“错误”文件夹,并且在移动它们后具有 .err 扩展名,因此很明显该文件不正确。
我搜索了几个小时,如果文件夹中只有一个文件,则下面的代码可以工作,但是当有更多 xcs 文件未生成 pgmx 时,批处理会给出“找不到路径”错误,因为它似乎搜索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
解决方案
试试这个!但是,它不会重命名文件。这是不必要的,因为它们将列在日志文件中。
for /R %%a in (*.xcs) do (
if exist %%~paerror if not exist %%~pa%%~na.pgmx (
copy /b %%a %%~paerror
echo %%a >> %%~palog.txt
)
)
推荐阅读
- node.js - MongoDB过滤问题
- javascript - jQuery文档中的每个元素
- javascript - js和猫鼬中的日期问题
- intercom - 是否可以在 nodeJS 函数中跟踪对讲事件?
- php - 如何使用 Linkedin Api 获取所有 Linkedin 个人资料帖子
- android - > 无法解析配置 ':app:_internal_aapt2_binary' 的所有文件
- ios - 如何使用 swift 将数据从本地 JSON 加载到表格视图中的标签
- sql - SQL Server:加入/合并表
- javascript - 在另一个类中访问异步函数,对对象属性给出空白响应如何解决这个问题?
- kotlin - 确定两个列表是否包含相同的不同项目