批处理文件扩展名

原创 2017年11月30日 19:07:01

需求:

起源于我使用markdown时,保存没有选择markdown格式。累积多次了之后觉得不好看,于是打算改成批处理格式可是一个一个就很难受,于是百度了下,然后感觉百度的东西,用它的批处理不足以显示程序员的逼格,于是就自己动手写了一段代码。

处理前的文件:
处理前

处理后的文件:
处理后

代码

#include<io.h>
#include<string>
#include<iostream>
#include<exception>
using namespace std;

int main(){
    try{
        char *filepath = "C:\\Users\\hujing\\Desktop\\md";
        intptr_t hFile;
        size_t n;//无符号整型
        string p,t;
        struct _finddata_t fileinfo;
        //_findfirst失败返回-1
        if((hFile = _findfirst(p.assign(filepath).append("\\*").c_str(),&fileinfo)) != -1){
            do{
               if(!(fileinfo.attrib & _A_SUBDIR)){
                   p.assign(filepath).append("\\").append(fileinfo.name);
                   cout<<p<<endl;
                   if(p.find('.md') == string::npos){//nops size_t的最大可能值,表示没有匹配
                        t.assign(filepath).append("\\").append(fileinfo.name).append(".md");
                        rename(p.c_str(),t.c_str());
                        cout<<t<<endl;
                    }
               }
            }while(_findnext(hFile,&fileinfo) == 0);
            _findclose(hFile);
        }
    }catch(std::exception &e){
         cout<<e.what()<<endl;
    }
}

遇到的问题

  1. gcc 不能捕获exception异常的解决
    c++标准 try, catch, throw是C++标准里的语法,标准只要求try catch捕获throw出来的异常,并不要求捕获系统异常(如被0除,段错误,CPU异常等)。从C++层面来说,不要期望try, catch能捕获系统异常。
    GCC所实现的C++异常处理框架中,它的catch(…)语法,并不能捕获系统异常。因此,这给C++中异常处理的良好运用打了大大的折扣;不同类型的系统异常等。所以Linux操作系统上的gcc编译的程序中,它只能捕获程序中,曾经被自己显式地throw出来的异常,而对于系统异常,catch block是毫无办法的。

  2. _findnext调用失败
    64bitwindows系统,使用intptr_t hFile instead of long

    2.1 使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,定义如下:

    
    #if __WORDSIZE == 64
    
    typedef long int                intptr_t;
    
    #else
    
    typedef int                        intptr_t;
    
    
    #endif
    

    2.2 long64位平台8个字节32位平台4字节

  3. error C2110: “+”: 不能添加两个指针
    “char” :字符串常量是指针类型

参考

  1. windows 下用命令行编译和运行c/c++
  2. C/C++获取文件后缀名并且比较
  3. C++中修改文件夹名以及文件名
  4. C++异常处理
  5. gcc不能捕获系统异常
  6. _findnext Api 64bit下崩溃
  7. 语言编程需要注意的64位和32机器的区别
  8. 关于int、short int、long int、long long 的区别
  9. 尝试用+添加两个指针
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hujinglovekmg/article/details/78679699

如何获取一个文件后缀?

场景: 在做图片格式判断和字符大小转换 //日期:2014年9月12日 下午 17:23 //用到函数 //strrchr() 从字符的最后一个位置开始读起 //find()  查找字...
  • taoerit
  • taoerit
  • 2014-09-23 19:04:18
  • 664

assoc ftype

ASSOC [.ext [ = [fileType] ] ] .ext 指定跟文件类型关联的文件扩展名 fileType 指定跟文件扩展名关联的文件类型 键入 ASSOC 而不带参数...
  • u010270148
  • u010270148
  • 2015-11-27 23:15:53
  • 626

用c#编的,批量修改文件的后缀名,挺有用的

  • 2010年03月08日 15:33
  • 37KB
  • 下载

按扩展名分类.bat

  • 2013年05月04日 07:30
  • 54B
  • 下载

astyle进行源文件格式化的扩展

astyle是一个对源文件进行格式化的不错工具,它可以嵌入到编辑、编译工具中,也可能直接在命令行运行;可以针对单个文件,也可以针对目录。本文所描述的方法,是指在window下的命令行方式,通过鼠标拖动...
  • alien75
  • alien75
  • 2015-03-13 09:39:18
  • 1014

Winhlp32安装失败 Win10解决方案

  • 2018年04月12日 18:02
  • 173KB
  • 下载

使用批处理获取拖拽文件的文件名+扩展名

今天看了下批处理,拿出来分享下。。。注释都写里面了,大家自己看吧=。= 程序作用:直接将文件拖入该批处理后,会判断扩展名执行相应的程序。(没什么用但是挺有意思的) 代码如下:@echo off R...
  • u014425641
  • u014425641
  • 2016-03-31 18:54:48
  • 2887

常见文件扩展名及简要说明

常见文件扩展名及简要说明 A 对象代码库文件  AAM Authorware shocked文件  AAS Authorware shocked包  ABF Adobe二进制屏幕字体  ...
  • LongZh_CN
  • LongZh_CN
  • 2012-09-24 21:47:15
  • 3338

asp获取文件后缀名函数

function GetExtendName(FileName)dim ExtNameExtName = LCase(FileName)ExtName = right(ExtName,3)ExtNam...
  • airweilai
  • airweilai
  • 2008-10-09 16:53:00
  • 368

《常见文件扩展名大全》

  • 2005年12月23日 14:11
  • 26KB
  • 下载
收藏助手
不良信息举报
您举报文章:批处理文件扩展名
举报原因:
原因补充:

(最多只允许输入30个字)