windows - 在 bat 中处理文件

标签 windows templates for-loop batch-file

我必须使用给定的模板显示文件名。我写了以下代码:

if "%2" == ""  (
    echo "Missing second argument!"
    set /p FileName="Input file name template ('*', '?' are allowed): "
    set /p FileType="Input file type ('text', 'bat', 'all' only): "

    if FileType == "all" (set FileType = "*")
) else (
    set FileType="%2"
)


echo %DirSearch%\%FileName%.%FileType%

for %%i in (%DirSearch%\%FileName%.%FileType%) do  (echo "Thats it: %%i")

如果第二个参数为空,我会向用户询问文件名模板、扩展名(如果它等于“all”,我将其值重写为“*”。

现在第一个麻烦是它没有被重写。当我把“全部”设置为“*”后,“文件类型”仍然是“全部”。为什么?

然后出现回声:

"C:\Folder"\test.all
"Thats it: "C:\Folder"\test.all"

如何将其解释为单值并在for中使用?


新代码:

if "%2" == ""  (
        ...
    if "%FileType%" == "all" (set FileType=*)
) else (
        ...
)

set result=%DirSearch%\%FileName%.%FileType%
echo %result%

for %%i in (%result%) do  (echo "Thats it: %%i")


// echo %result%:
"C:\Data\test"\test.all
// in for cycle
"Thats it: "C:\Data\test"\test.all"

正确的字符串应该是:"C:\Data\test\test.all"

最佳答案

您没有以正确的方式测试 FileType 的值。此外,您没有以正确的方式设置新值。代码应该是这样的

if "%FileType%" == "all" (set FileType=*)

否则,您只是在比较字符串“FileType”和“all”,这当然不会成功。

旁白:您似乎在设置 DirSearch 的代码中也有一些错误;那里有一个额外的尾随双引号,这是不应该的。

关于windows - 在 bat 中处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425309/

相关文章:

python - 如何从字典中检索多个项目对

javascript - 在 for 循环中使用现有变量

windows - 在 Windows KVM 实例中运行 Win10 Docker 容器时出错

c++ - LNK2038 : mismatch detected for 'boost_log_abi' : value 'v2s_mt_nt5' doesn't match value 'v2s_mt_nt6'

c - 删除注册表项并启动应用程序

c++ - 事件类需要更新

c++ - 这些链接错误是什么意思? (C++)(MSVC++)

java - Java JNA映射中的VirtualAllocEx函数

c++ - 如何在 C++ 头文件和源文件中使用 NumPy C-API?

java - 如何不在循环的阶乘表达式末尾打印乘号?