2017-05-29 174 views
1

我試圖編寫一個執行以下操作的代碼。我在具有特定擴展名的目錄中有一些文件。我做了一個包含所有這些的矢量。現在我要根據擴展名將每個文件重命名爲其他內容。所以爲此,我試圖用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 
+0

不要設置變量'PATH',因爲這是系統保留!爲腳本使用不同的變量名稱! – aschipfl

+0

好的,請記住,謝謝 – Cantafford

回答

2

嘗試:

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

比較字符串不能使用wildcards.Here可以看到有關批次substrings

+0

謝謝。它工作得很好。你能解釋一下你用「〜-4」做了什麼。我沒有在網上找到很多文檔。我有一個ideea但我不確定。 – Cantafford

+0

@Cantafford':〜-4'取一個變量的最後4個符號。 – npocmaka

1

這裏是做這件事的方式略有不同一些例子時。

@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 
相關問題