使用批处理检查文件是否存在,将文件名存储到数组中并移动它们

问题描述 投票:0回答:1

我有三个或更多带有子目录的目录,我必须在其中检查和排序数千个名为

"00001_*.jpg"
"99999_*.jpg"
的文件。

但为了简单起见,我们将测试 20 张图像的样本。

例如,我有三个父目录

A
B
C
。目录
B
内有四个图像
00017_0.jpg
00018_0.jpg
00019_0.jpg
00020_0.jpg
。我想运行一个脚本来检测这些文件名,例如在目录
A
中并将它们移动到名为
Check
, (
A\Check
) 的子目录中。

我尝试将文件名存储到数组中,但我已经陷入困境。我尝试将它们存储到

list_1
中,但是当我
echo
结果时,我什么也没得到
""

我使用参数编辑

B
中目录
FolderPath
中图像的路径:
default
default
20

结果:

Start value (default: 1):
Increment by: (default: 1):
Last value (default: 99999): 20
Not exist: 00001_0.jpg
Not exist: 00002_0.jpg
Not exist: 00003_0.jpg
Not exist: 00004_0.jpg
Not exist: 00005_0.jpg
Not exist: 00006_0.jpg
Not exist: 00007_0.jpg
Not exist: 00008_0.jpg
Not exist: 00009_0.jpg
Not exist: 00010_0.jpg
Not exist: 00011_0.jpg
Not exist: 00012_0.jpg
Not exist: 00013_0.jpg
Not exist: 00014_0.jpg
Not exist: 00015_0.jpg
Not exist: 00016_0.jpg
Found file: 00017_0.jpg
Found file: 00018_0.jpg
Found file: 00019_0.jpg
Found file: 00020_0.jpg
"The length of the array is" 0
Press any key to continue . . .

以下是我对此脚本的改编。

它在目录

B
中找到了文件,但是我对
list_1
数组的添加还没有成功,所以我无法将它们移动到
Check
子目录; (这部分尚未编写脚本).

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "list_1="
set "ValueStart=1"
set "ValueIncrement=1"
set "ValueLast=99999"
set /P "ValueStart=Start value (default: %ValueStart%): " 
set /P "ValueIncrement=Increment by: (default: %ValueIncrement%): "
set /P "ValueLast=Last value (default: %ValueLast%): "

set "FolderPath=%USERPROFILE%\folder\subfolder"
setlocal EnableDelayedExpansion
for /L %%G in (%ValueStart%,%ValueIncrement%,%ValueLast%) do (
    if %%G LSS 100000 (
        set "FileName=0000%%G"
        set "FileName=!FileName:~-5!_0.jpg"
    ) else set "FileName=%%G_0.jpg"
    if exist "!FolderPath!\!FileName!" (
        set "list_1[%%G]=FileName"
        echo Found file: !FileName!) else echo Not exist: !FileName!
)

set "x=0"
:SymLoop 

if defined list_1[%x%] ( 
   call echo %%list_1[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%
pause
endlocal
batch-file
1个回答
0
投票

它将节省我多年的时间。我不需要数组来移动文件,但数组对我来说很重要,因为它们提供了我能够扩展的结构。现在可以通过阵列自动执行移动和许多其他任务。展开下面的脚本可以移动需要检查的图像。这是我再也不用做的众多手动繁重的 Windows 任务之一:) ...

@echo off

setlocal EnableExtensions DisableDelayedExpansion
set "List_1="
set "ValueStart=0"
set "ValueIncrement=1"
set "ValueLast=99999"
set /P "ValueStart=Start value (default: %ValueStart%): " 
set /P "ValueIncrement=Increment by: (default: %ValueIncrement%): "
set /P "ValueLast=Last value (default: %ValueLast%): "

set "FolderPath=%USERPROFILE%\folder\subfolder"
setlocal EnableDelayedExpansion
for /L %%G in (%ValueStart%,%ValueIncrement%,%ValueLast%) do (
    if %%G LSS 100000 (
        set "FileName=0000%%G"
        set "FileName=!FileName:~-5!_0.jpg"
    ) else set "FileName=%%G_0.jpg"
    if exist "!FolderPath!\!FileName!" (
        set "List_1[%%G]=!FileName!"
        set List_1[%%G]=!list_1[%%G]!
        echo Found file: !FileName!
    ) else  (
            set List_1[%%G]=""
            echo Not exist: !FileName!
            )
    echo List_1[%%G]=!List_1[%%G]!
)

pause
endlocal

结果

Start value (default: 0):
Increment by: (default: 1):
Last value (default: 99999): 20
Not exist: 00000_0.jpg
List_1[0]=""
Not exist: 00001_0.jpg
List_1[1]=""
Not exist: 00002_0.jpg
List_1[2]=""
Not exist: 00003_0.jpg
List_1[3]=""
Not exist: 00004_0.jpg
List_1[4]=""
Not exist: 00005_0.jpg
List_1[5]=""
Not exist: 00006_0.jpg
List_1[6]=""
Not exist: 00007_0.jpg
List_1[7]=""
Not exist: 00008_0.jpg
List_1[8]=""
Not exist: 00009_0.jpg
List_1[9]=""
Not exist: 00010_0.jpg
List_1[10]=""
Not exist: 00011_0.jpg
List_1[11]=""
Not exist: 00012_0.jpg
List_1[12]=""
Not exist: 00013_0.jpg
List_1[13]=""
Not exist: 00014_0.jpg
List_1[14]=""
Not exist: 00015_0.jpg
List_1[15]=""
Not exist: 00016_0.jpg
List_1[16]=""
Found file: 00017_0.jpg
List_1[17]=00017_0.jpg
Found file: 00018_0.jpg
List_1[18]=00018_0.jpg
Found file: 00019_0.jpg
List_1[19]=00019_0.jpg
Found file: 00020_0.jpg
List_1[20]=00020_0.jpg
Press any key to continue . . .
© www.soinside.com 2019 - 2024. All rights reserved.