【问题标题】:Checking if an array element(file) has a specific extension检查数组元素(文件)是否具有特定扩展名
【发布时间】:2017-10-29 21:10:09
【问题描述】:

我正在尝试编写执行以下操作的代码。我在具有特定扩展名的目录中有一些文件。我制作了一个包含所有这些的向量。现在我想根据扩展名将每个文件重命名为其他文件。因此,为此我试图将创建的向量与一个 for 循环分开,在该循环中我检查每个元素扩展。 如果找到扩展名为 .elf 的文件,现在我不会重命名它,只是在屏幕上回显它。我写了这段代码,但我没有得到回声,因为我的目录中没有 .elf 文件。请帮我纠正这个。谢谢。

@echo off
setlocal enabledelayedexpansion

cd C:\Users\uidr0938\Desktop\Copy
set path=C:\Users\uidr0938\Desktop\Copy

set /a index=0

for /r %%i in (*) do (
    set value[!index!]=%%i
    set /a index+=1
)

set /a limit=%index%-2

for /l %%a in (0;1;%limit%) do (
    if !value[%%a]! equ *.elf (
        echo !value[%%a]!
    )
)





endlocal

【问题讨论】:

  • 不要设置变量PATH,因为这是系统保留的!为您的脚本使用不同的变量名!
  • 好的会记住这一点谢谢

标签: batch-file scripting


【解决方案1】:

尝试:

....
for /l %%a in (0;1;%limit%) do (
    if "!value[%%a]:~-4!" equ ".elf" (
        echo !value[%%a]!
    )
)

比较字符串时不能使用通配符。这里你可以看到一些关于批处理substrings的例子

【讨论】:

  • 谢谢。它工作得很好。你能解释一下你对“~-4”做了什么吗?我在网上没有找到太多的文档。我有一个想法,但我不确定。
  • @Cantafford :~-4 从变量中获取最后 4 个符号。
【解决方案2】:

这是一种稍微不同的方法。

@IF NOT EXIST "%USERPROFILE%\Desktop\Copy\" @EXIT/B

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET "_path=%USERPROFILE%\Desktop\Copy"

SET "_index=0"
FOR /F "DELIMS=" %%A IN ('WHERE/R "%_path%" * 2^>NUL') DO (SET/A "_index+=1"
    SET "_value[!_index!]=%%A")
IF %_index% EQU 0 EXIT/B

FOR /F "TOKENS=1* DELIMS==" %%A IN ('SET _value['
) DO IF /I "%%~xB"==".elf" ECHO %%B

PAUSE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2012-03-13
    • 2023-04-05
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多