【发布时间】:2019-06-22 20:31:18
【问题描述】:
我目前正在编写batch-file 以在目录中执行一个未知的命名校验和文件。问题是我不知道如何在目录中搜索 .sfv 或 .md5 并将找到的校验和文件设置为我可以稍后在脚本中执行的变量。
@echo off
set quicksfv="%ProgramFiles%\QuickSFV\quicksfv.exe"
if exist "*.sfv" (
goto sfvcheck
)
and (
set EXT="sfv"
)
else (
goto skip
)
if exist "*.md5" (
goto sfvcheck
)
and (
set EXT="md5"
)
else (
goto skip
)
/*
this is what i would like to add if the checksum file exist
*/
GetFileName of checksum file
set CHECKSUM="checksumfilename"
:sfvcheck
quicksfv "%CHECKSUM%.%EXT%"
:skip
echo. No checksum file was found!
pause
exit
【问题讨论】:
-
在命令提示符窗口中输入
if /?,学习如何使用if/else;并且没有and命令... -
打开命令提示符窗口并运行
for /?。输出帮助有助于理解在批处理文件中使用的命令行,例如@set "FileFound=" & (for %%I in (*.sfv *.md5) do @"%ProgramFiles%\QuickSFV\quicksfv.exe" "%%I" & set "FileFound=yes") & if not defined FileFound echo No check sum file was found!是批处理文件的替代品。另见single line with multiple commands using Windows batch file。让我知道我是否应该写一个答案并详细解释这个命令行如何替换你的整个批处理文件。 -
@aschipfl if 帮助部分没有提供我的问题的答案,或者我找不到它。它确实有一些关于文件名的有用信息,但在我的情况下,文件名是未知的。正确的方法是
if exist "*.sfv" ( set EXT=sfv goto sfvcheck )@Mofi 谢谢你的帮助部分。我注意到 for /R 可以帮助我执行校验和文件的子目录!还发现了一些关于我以前使用过的令牌和 delim 的重要信息,但总是反复试验。我会试试你的方法然后回来!再次感谢你:)。 -
@Mofi 非常感谢您提供的信息和示例代码行。在带有校验和文件的目录中制作了一个 bat,它就像一个魅力!我在这篇文章之后学到的单行内容,但你的版本帮助我更好地理解了它们的组合。虽然在编写时我发现多行更易读且更容易调试,但最后我肯定会单行大多数命令。我不知道如何将答案标记为正确,但是...
-
使其作为右键单击 bat 脚本编辑此
(for %%I in (%1\*.sfv *.md5)
标签: batch-file file batch-file variables search