Windows批处理命令快速获取文件夹下特定类型的文件名 (2022.5.15)

  • 1、需求分析
  • 2、batch简介
  • 3、代码实现
    • 3.1 八种编程语言分别实现
      • 3.1.1 C# 实现
      • 3.1.2 C++ 实现
      • 3.1.3 java 实现
      • 3.1.4 Python 实现
      • 3.1.5 Matlab 实现
      • 3.1.6 C 实现
      • 3.1.7 Scala 实现
      • 3.1.8 VB 实现
    • 3.2 Windows批处理脚本实现
  • 4、总结

1、需求分析

在日常的学习和工作中,可能大家或多或少会遇到这样一个问题:对于电脑文件资源管理器中的某个文件夹,该文件夹下包含许多不同类型的文件,此时自己想要立刻获取某种特定类型对应的全部文件名。当然,不可否认的是,我们自然是可以找到很多种方法来解决这个问题,但关键在于如何简单直接、快速而又高效地完成这个任务呢?

2、batch简介

batch批处理是一种脚本语言,可称为宏,用于对一些对象进行批处理流程化的操作,任何操作系统中可运行的执行程序都可以放到批处理文件中来运行。常见的批处理主要包含DOS批处理和PowerShell批处理,另外很多专业软件通常也内置有批处理功能,目的是便于用户进行自动化操作
        在Windows系统中,批处理命令可由PowerShellcmd窗口来解释运行,对应的批处理文件扩展名一般为.cmd和.bat
        批处理文件称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用Notepad直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在cmd prompt键入批处理文件的名称或者直接双击批处理文件,操作系统就会调用Cmd.exe运行该批处理程序。

cmd文件 bat文件

3、代码实现

对普通用户而言,当搜索结果较少时,自己可以手动逐个复制并粘贴文件名,但这样做效率低、速度慢、容易导致错误,且手工劳动量会随搜索结果数目的增多而显著增加;而对于程序员和开发者而言,大抵是利用现有的编程语言(C++、Python、Java、C#、Matlab、C、VB等)编写执行程序,那么无论采用何种编程语言,都要经历三个步骤:配置环境、编写代码、编译运行,最终获得程序执行的结果。这里推荐大家利用Windows系统自带的批处理命令脚本来实现,因为无需任何环境配置,简单直接,十分高效,只需熟悉常用的Shell命令即可。
        如下图所示,给出一个实例,在D:\test文件夹包含多种不同格式类型的文件,如.txt文本文件、.jpg图片文件、.pdf、.json数据文件、.xlsx表格文件、.docx文档文件、.pptx演示文稿文件、.mp4视频文件等.

3.1 八种编程语言分别实现

这里分别利用C#、C++、Java、Python、Matlab、C、Scala、VB八种编程语言来实现文件夹下特定文件类型的搜索功能

3.1.1 C# 实现

利用Microsoft Visual Studio 2015编写C#程序实现,具体代码和运行结果如下。
Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;namespace GetFileNameWithSpecificSuffix
{class Program{static void Main(string[] args){while (true){string path = "", suffix_name = "";//所要查找的文件夹、要搜索的文件后缀名Console.WriteLine("************获取文件夹下特定类型文件的文件名*************(Enter键退出)!");Console.Write("请输入要搜索的文件目录(如 D:\\test):");path = Console.ReadLine();Console.Write("请输入要搜索的文件后缀名(如*.txt):");suffix_name = Console.ReadLine();if (path != "" && Directory.Exists(path))//文件目录不为空且文件夹存在{DirectoryInfo folder = new DirectoryInfo(path);if (suffix_name == ""){foreach (FileInfo file in folder.GetFiles()){Console.WriteLine(file.Name);}}else{foreach (FileInfo file in folder.GetFiles(suffix_name)){Console.WriteLine(file.Name);}}}else{Console.WriteLine("文件目录不存在,退出!");break;//退出程序}}}}
}


3.1.2 C++ 实现

利用VS 2015编写C++程序实现,具体代码和运行结果如下。
main.cpp

#include <iostream>
#include <io.h>
using namespace std;#define MAX_FILENAME_LENGTH 500
#define MAX_SUFFIX_LENGTH 6void getFiles(char *path, char *suffixname)
{__int64  hFile = 0;struct _finddata_t singlefileinfo;const char* str_add = "\\*";size_t len3 = strlen(str_add),len_path = strlen(path);for (size_t i = 0; i <len3; i++){path[i + len_path] = str_add[i];}if ((hFile = _findfirst(path, &singlefileinfo)) != -1)    //string p; p.assign(path).append("\\*").c_str() 替代此行的path{do{if ((singlefileinfo.attrib & _A_SUBDIR)){if (strcmp(singlefileinfo.name, ".") != 0 && strcmp(singlefileinfo.name, "..") != 0)continue;}else{size_t length = strlen(singlefileinfo.name);char *filename = singlefileinfo.name;size_t pos_lastdot = -1;for (size_t j = length - 1; j>0; j--)if (filename[j] == '.'){pos_lastdot = j;break;}if (pos_lastdot != -1){size_t actualsuffix_len = length - pos_lastdot;if (actualsuffix_len == strlen(suffixname)){char actualsuffix[MAX_SUFFIX_LENGTH];memcpy(actualsuffix, filename + pos_lastdot, actualsuffix_len);int flag = 1;for (int k = 0; k<actualsuffix_len; k++)if (actualsuffix[k] != suffixname[k]){flag = -1; break;}if (flag == 1)cout<< filename<< endl;}}}} while (_findnext(hFile, &singlefileinfo) == 0);_findclose(hFile);}
}int main(int argc, char **argv)
{while (true){char path[MAX_FILENAME_LENGTH], suffixname[MAX_SUFFIX_LENGTH];printf("*************查找指定文件夹下具有特定扩展名的所有文件***************\n");cout << "请输入要搜索的文件夹(如D:\\test):";cin >> path;cout << "请输入文件后缀名(如.jpg、.json、.md、.pdf、.xlsx、.pptx、.vsdx、.docx、.mp4、.bat、.txt):";cin >> suffixname;if (strlen(path) < 4 || strlen(suffixname) < 3)break;getFiles(path, suffixname);}return 0;
}

3.1.3 java 实现

利用Eclipse编写Java程序实现,具体代码和运行结果如下。
GetFIleNameBySuffix.java

package com;import java.io.File;public class GetFileNameBySuffix
{public static void printFileNameBySuffix(String path,String suffixname){System.out.println(path+"文件夹下后缀名为"+suffixname+"的文件:");File file = new File(path);       //获取其file对象File[] fs = file.listFiles();for(File f:fs){String filename = f.getName();if(f.isFile() && filename.endsWith(suffixname))System.out.println(filename);}}public static void main(String[] args){String folder = "D:\\test";String[] suffixname_list = {".jpg", ".json", ".md", ".pdf", ".xlsx", ".pptx", ".vsdx", ".docx", ".mp4", ".bat", ".txt"};for(int i=0;i<suffixname_list.length;i++){printFileNameBySuffix(folder, suffixname_list[i]);}}
}

3.1.4 Python 实现

利用PyCharm编写Python程序实现,具体代码和运行结果如下。
GetFileNameBySuffix.py

import osdef getsuffixoffile(filename): # 获取文件对应字符串后缀名的函数res = ''lastdot_index = -1for i in range(0, len(filename)):if filename[i] == '.':lastdot_index = iif lastdot_index != -1:res += filename[lastdot_index:len(filename)]return resdef getFileNameBySuffixname(file_dir, suffix_name): # 获取某文件夹下特定后缀名的所有文件名filelist = []for root, dirs, files in os.walk(file_dir):for file in files:if getsuffixoffile(file) == suffix_name:filelist.append(file)return filelistdef shuchu(filelist):for x in filelist:print(x)if __name__ == "__main__":file_dir = 'D:\\test'suffixname_list = ['.jpg', '.json', '.md', '.pdf', '.xlsx', '.pptx', '.vsdx', '.docx', '.mp4', '.bat', '.txt']for i in range(0, len(suffixname_list)):suffix_name = suffixname_list[i]print('**************'+file_dir + '文件夹下后缀名为'+suffix_name+'的文件*******************')result = getFileNameBySuffixname(file_dir, suffix_name)shuchu(result)


3.1.5 Matlab 实现

利用Matlab R2021a编写脚本实现,具体代码和运行结果如下。

folder = 'D:\test';
suffixnamelist = {'.jpg', '.json', '.md', '.pdf', '.xlsx', '.pptx', '.vsdx', '.docx', '.mp4', '.bat', '.txt'};
filelist = dir(folder);
for i=1:1:length(suffixnamelist)suffixname = suffixnamelist{1,i};fprintf(['**************',folder,'文件夹下后缀名为',suffixname,'的文件**************','\n']);for j=1:1:length(filelist)if filelist(j).isdir == 0 && isSuffix(filelist(j).name,suffixname)fprintf([filelist(j).name,'\n'])endend
endfunction [flag] = isSuffix(filename, suffix)%判断字符串以某个字符串结尾flag = 0;len1 = strlength(filename);len2 = strlength(suffix);suf_filename = filename(len1-len2+1:len1);if strcmpi(suf_filename,suffix)flag = 1;end
end


3.1.6 C 实现

利用CodeBlocks编写C程序实现,具体代码和运行结果如下。
main.c

#include <stdio.h>
#include<io.h>
#define MAX_FILENAME_LENGTH 500void getFiles(char *path, char *suffixname)
{long   hFile = 0;struct _finddata_t singlefileinfo;strcat(path, "\\*");if ((hFile = _findfirst(path, &singlefileinfo)) != -1){do{if ((singlefileinfo.attrib & _A_SUBDIR)){if (strcmp(singlefileinfo.name, ".") != 0 && strcmp(singlefileinfo.name, "..") != 0)continue;}else{int length = strlen(singlefileinfo.name);char *filename = singlefileinfo.name;int pos_lastdot = -1;for(int j=length-1;j>0;j--)if(filename[j] == '.'){pos_lastdot = j;break;}if (pos_lastdot != -1){int actualsuffix_len = length - pos_lastdot;char actualsuffix[actualsuffix_len];if (actualsuffix_len == strlen(suffixname)){memcpy(actualsuffix,filename + pos_lastdot,actualsuffix_len);int flag = 1;for(int k=0;k<actualsuffix_len;k++)if(actualsuffix[k] != suffixname[k]){flag = -1;break;}if(flag == 1)printf("%s\n",filename);}}}} while (_findnext(hFile, &singlefileinfo) == 0);_findclose(hFile);}
}int main()
{while(1){printf("*************查找指定文件夹下具有特定扩展名的所有文件***************\n");printf("请输入要搜索的文件夹(如D:\\test):");char path[MAX_FILENAME_LENGTH];
//        scanf("%s",path);char *str1 = gets(path);char suffixname[6];printf("请输入文件后缀名(如.jpg、.json、.md、.pdf、.xlsx、.pptx、.vsdx、.docx、.mp4、.bat、.txt):");
//        scanf("%s",suffixname);char *str2 = gets(suffixname);if(strlen(str1) < 4 || strlen(str2) < 3)break;getFiles(path,suffixname);}return 0;
}


3.1.7 Scala 实现

利用IDEA编写Scala程序实现,具体代码和运行结果如下。
TestGetFileNameBySuffix.scala

import java.io.Fileobject TestGetFileNameBySuffix
{def main(args: Array[String]): Unit ={val dir : String = "D:\\test";var suffixname_list = Array(".jpg", ".json", ".md", ".pdf", ".xlsx", ".pptx", ".vsdx", ".docx", ".mp4", ".bat", ".txt");val file: File = new File(dir);val files = file.listFiles(_.isFile());//仅搜索文件,不搜索文件夹var i = -1;for(i <- 0 to (suffixname_list.length-1) ){println("************"+dir + "文件夹下后缀名为" + suffixname_list(i) + "的文件************");var suffixname : String= suffixname_list(i);var j = -1;for(j <- 0 to (files.length-1) ){var filename:String = files(j).getName();if (filename.endsWith(suffixname)){println(filename);}}}}
}


3.1.8 VB 实现

利用VS2015编写VB程序实现,具体代码和运行结果如下。
Module1.vb

Module Module1Sub Main()Dim folder As String = "D:\test"Dim suffixnamelist As String() = New String() {".jpg", ".json", ".md", ".pdf", ".xlsx", ".pptx", ".vsdx", ".docx", ".mp4", ".bat", ".txt"}Dim fso, fo, fis, fifso = CreateObject("Scripting.FileSystemObject")fo = fso.GetFolder(folder) '输入指定目录fis = fo.FilesFor i = 0 To suffixnamelist.Length - 1Dim suffixname As String = suffixnamelist(i) '从后缀名列表中获取后缀名Console.WriteLine("**************" + folder + "文件夹下后缀名为" + suffixname + "的文件**************")For Each fi In fisDim filename As String = fi.NameIf filename.EndsWith(suffixname) ThenConsole.WriteLine(filename)End IfNextNextEnd Sub
End Module

3.2 Windows批处理脚本实现

Windows操作系统中,可以打开cmd窗口或者PowerShell窗口来执行Windows批处理脚本(命令),输入help可查看相关指令的帮助。另外也可到微软官网查看cmd文档。之后给出两种实现方法来获得文件夹下特定后缀名的文件名,推荐使用第二种方法(在配置opencv、eigen、osg等库的dll、lib和h文件时经常需要用到,较为直接)。

cmd窗口 PowerShell窗口

第一种方式(包含其他附加信息):在目标文件夹D:\test下同时按住Shift和鼠标右键打开cmd命令行窗口,

dir D:\test\*.txt > listtxtfilename.txt # 生成一个txt文件,里面包含txt为后缀名的文件名(同理可利用*.jpg等)

第二种方式(仅文件名):在目标文件夹D:\test下新建两个bat文件,分别命名为test.batrun.bat后,输入如下代码,完成后双击run.bat即可运行代码。
test.bat

@echo off
if not exist *.jpg (
echo This directory contains no text files.
) else (echo ********This directory contains the following jpg files********echo.dir /b *.jpg)
if not exist *.json (
echo This directory contains no text files.
) else (echo ********This directory contains the following json files********echo.dir /b *.json)
if not exist *.md (
echo This directory contains no text files.
) else (echo ********This directory contains the following md files********echo.dir /b *.md)
if not exist *.pdf (
echo This directory contains no text files.
) else (echo ********This directory contains the following pdf files********echo.dir /b *.pdf)
if not exist *.xlsx (
echo This directory contains no text files.
) else (echo ********This directory contains the following xlsx files********echo.dir /b *.xlsx)
if not exist *.pptx (
echo This directory contains no text files.
) else (echo ********This directory contains the following pptx files********echo.dir /b *.pptx)
if not exist *.vsdx (
echo This directory contains no text files.
) else (echo ********This directory contains the following vsdx files********echo.dir /b *.vsdx)
if not exist *.docx (
echo This directory contains no text files.
) else (echo ********This directory contains the following docx files********echo.dir /b *.docx)
if not exist *.mp4 (
echo This directory contains no text files.
) else (echo ********This directory contains the following mp4 files********echo.dir /b *.mp4)
if not exist *.bat (
echo This directory contains no text files.
) else (echo ********This directory contains the following bat files********echo.dir /b *.bat)
if not exist *.txt (
echo This directory contains no text files.
) else (echo ********This directory contains the following text files********echo.dir /b *.txt)

run.bat

start test.bat
第一种方式运行结果 第二种方式运行结果(推荐)

Windows批处理脚本实现的两种方式运行结果

4、总结

在实际的学习和工作中,如果不是特别依赖于某种编程语言,那么用户可以根据实际需求选择适合自己的方法来实现,利用编程语言也可以调用cmd或Process进行批处理操作。总的来说,有时编程语言甚至不如cmd命令或者batch批处理脚本更为直接有效,因此掌握基本的批处理命令可有效提高工作效率,下面是一些基本常用的cmd命令,记得多用help哦!!!

python test.py args1 args2 # 运行python代码
java -jar test.jar args1 args2 # 运行java代码
wget httpurl_file # 利用wget和url下载文件
start calc.exe # 打开计算器
start notepad.exe # 打开记事本
start explorer.exe # 打开文件资源管理器
help # 查看命令帮助
systeminfo # 查看系统信息
ipconfig # 显示、修改TCP/IP设置
hostname
echo %COMPUtERNAME% # 列出主机名称
rename # 重命名文件
move # 移动文件
copy # 赋值文件
xcopy # 复制文件和目录,包括子目录
del # 删除文件
F: # 进入F盘
cd test # 进入文件夹
dir # 查看目录文件
title # 为cmd窗口创建标题
color 48 # 窗口中的前景色和背景色
date /t # 显示当前系统日期
time # 显示当前系统时间
ping # 主要 TCP/IP 命令,测试网络连通性
PowerShell.exe 利用cmd进入或退出PowerShell
call xxx.bat args1 args2 # 调用xxx.bat并传参
regedit # 打开注册表编辑器
exit # 退出,关闭窗口

Windows批处理命令快速获取文件夹下特定类型的文件名(2022.5.15)相关推荐

  1. 【Windows】Windows10系统获取文件夹下的文件名方法

    在工作过程中经常会碰到需要获得文件夹下文件名的情况,而如果手动获取的话,不仅太慢还很容易出错,这该怎么办呢?下面教大家在win10系统中快速获取文件夹下文件名的方法. 工具/原料 Windows10 ...

  2. 通过CMD命令行获取文件夹下的所有文件名称(电脑小白专用)

    文章目录 起因 方法 1. 打开CMD: 2. 在弹出的命令窗口中跳转到文件夹路径下 3.复制文件夹的路径 4.在命令行中执行获得文件名命令 起因 在vs配置OpenCV时,需要在链接器中输入许多.l ...

  3. python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用

    打算写一个替换文件的程序,该文件可能在不同文件夹路径,使用python操作肯定最方便,特此简单整理封装了两个python函数和一个cmd复制文件的命令方法,供自己翻阅或来者参考 辉 2022.8.9. ...

  4. Windows 下 C++ 利用 OpenCV glob 函数获取文件夹下所有文件绝对路径

    绪论 本文记录 Windows 下 C++ 利用 OpenCv glob 函数得到 文件夹下所有文件的绝对路径(含文件名).本文还含有 std::string::find()等函数的记录.如果是 Py ...

  5. linux打开文件夹所有文件名,获取文件夹下的所有文件名 (linux windows)

    windows下获取文件夹下的所有文件名 1 #include "folder.hpp" 2 #include 3 4 void getFilesFromFolder(const ...

  6. python 获取文件夹所有文件列表_python获取文件夹下所有文件及os模块方法

    python获取文件夹下所有文件 方法一:使用os.listdir import os for filename in os.listdir(r'c:\windows'): print filenam ...

  7. Qt 获取文件夹下所有文件

    Qt 获取文件夹下所有文件代码如下: QStringList getFileNames(const QString &path) {QDir dir(path);QStringList nam ...

  8. C#获取文件夹下指定格式的所有文件

    C#获取文件夹下指定格式的所有文件的方法,虽然很简单,但还是分享一下吧,用到时可以稍加修改和优化就可以使用. 获取指定目录下所有文件 //最要使用 System.IO.Directory.GetFil ...

  9. android 获取文件夹下的所有文件

    昨天,在做工作时,需要遍历所有一个文件夹下的所有文件夹,当时自己也不知道怎么做,后来在网上搜索了一些资料,发现其实也很简单. 1.获取SD是否可以读写,如果可以,则传入文件的路径 /*读取输入的某个文 ...

最新文章

  1. iOS单例模式定义与使用
  2. 【求助】小系统组成大系统所遇到的问题
  3. 鼠标追踪没用_【擺评】赛睿里最好用的小手鼠标---Rival 3
  4. C语言之字符串探究(四):读越界、写越界
  5. Github应用最广泛的开源项目
  6. 通过v$sqlarea,v$sql查询最占用资源的查询
  7. h3c Telnet配置实验
  8. oracle bpm 教学视频,Oracle BPM 官方文件摘录
  9. 视频编解码之H.264
  10. 中国首档「程序员真人秀」综艺登上热搜,燃炸了!
  11. C语言之结构体 共用体 枚举 typedef
  12. 共享计算机如何重新登录密码,电脑共享后怎么登陆密码怎样设置
  13. 博科查看光功率_博科系交换机光模块信号强度查看
  14. Bzoj4698: [Sdoi2008]Sandy的卡片
  15. 基于ZFAKA二次开发,添加PayJS支付渠道
  16. 腾讯技术开放日 | 腾讯会议如何进行视频质量评估与优化?
  17. Android 加固与监测,基于Android平台的恶意软件检测和软件加固技术研究
  18. matlab 理想低通滤波器函数,基于MATLAB的理想低通滤波器的设计
  19. pdf转换器在线转换详细教程
  20. centos7 安装anaconda3,notebook,解决matplotlib 中文乱码

热门文章

  1. Ubuntu 22.04 无法使用网易云音乐
  2. 计算机毕业设计Java桌游店会员管理系统(源码+系统+mysql数据库+Lw文档)
  3. 我叫mt4 服务器维护,我叫MT48月22日停机维护公告 我叫MT4最新维护内容一览-游侠手游...
  4. 失控--阅读笔记群蜂思维
  5. 打印机文件服务器主机,打印机服务器主机名称是什么原因
  6. .NetCore外国一些高质量博客分享
  7. 设计模式之--迭代器模式
  8. Mac Safari 配置 IE 代理 (支持 IE 调试)
  9. HTML5期末大作业:手表商城网站设计——手表商城网站模板源码(17页) web期末作业设计网页_手表商城网页设计作业成品
  10. PDF如何插入新的PDF页面