青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

自定義可變參數函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口

   今天在做課設,由于想給程序加上刪除以前的配置文件的功能,由于某種原因,同類型的文件比較多,加上暑假實習的時候,
做了個用dir命令實現的批量文件修改器,所以決定用del命令,一下子寫好后,發現以前由于沒有要求做界面,而現在課設我用
的是MFC里面的CFormView做的界面,所以會閃爍而過一個console窗口,實在不爽之,所以,找方法去掉它。
網上找來找去,只找到啟動cmd,傳參數的都很少,傳參數時候組合參數的更加少,加上我對dos命令不熟悉,所以實在悲催,
浪費了不少時間。
   這種東西,一直竊以為有人做好之后,提供比較合格的接口,大家以后都方便,所以貼出來,大家雅俗共賞,批評下。
還發現網上的代碼有個問題,居然大多把直接cmd路徑寫上去,其實大家都知道,系統路徑是不確定的,所以特定修正了這個bug,
而且我也實驗了下,無論參數是絕對路徑還是相對路徑這個函數都是有效的。
   大家用這個函數的時候,記得cmd命令都是可以匹配通配符的哦。

函數代碼如下:

//批量刪除指定格式文件,不顯示console窗口
void BatchDelFile(char* pszFile)
{
char szDelCmd[MAX_INFO_LEN];
char szCurDir[MAX_PATH];
char szCmdPath[MAX_PATH];
SHELLEXECUTEINFO shExecInfo = {0};
GetCurrentDirectory(MAX_PATH, szCurDir);//獲取當前路徑
GetSystemDirectory(szCmdPath, MAX_PATH);//獲取cmd路徑
strcat(szCmdPath, "\\cmd.exe");
sprintf(szDelCmd, "%s /c del /f /q /s %s",
szCmdPath, pszFile);//格式化出命令字符串, 注意加上/c, 還有那2個""
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = NULL;
shExecInfo.lpFile = szCmdPath;//cmd的路徑
shExecInfo.lpParameters = szDelCmd;//程序參數,參數格式必須保證正確
shExecInfo.lpDirectory = szCurDir;//如果szFile是相對路徑,那個這個參數就會起作用
shExecInfo.nShow = SW_HIDE;//隱藏cmd窗口
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
WaitForSingleObject(shExecInfo.hProcess, INFINITE);//無限等待cmd窗口執行完畢
}

以下是我在一個消息出來函數的調用:
char szDelFiles[MAX_PATH];
sprintf(szDelFiles, "\"*.tcp.txt\" + \"*.udp.txt\"");
BatchDelFile(szDelFiles);

   為了調用方便,我還實現了一個可變參數列表的版本,以及一個傳一個文件名數組的版本。

可變參數版本代碼如下:
//批量刪除指定格式文件,不顯示console窗口
void BatchDelFile(int nNum, ...)
{
va_list argPtr;    
int i;
char* pszDelCmd;
char szCurDir[MAX_PATH];
char szCmdPath[MAX_PATH];
SHELLEXECUTEINFO shExecInfo = {0};
pszDelCmd = (char*)malloc((nNum + 2)* MAX_PATH);
GetCurrentDirectory(MAX_PATH, szCurDir);//獲取當前路徑
GetSystemDirectory(szCmdPath, MAX_PATH);//獲取cmd路徑
strcat(szCmdPath, "\\cmd.exe");
sprintf(pszDelCmd, "%s /c del /f /q /s ", szCmdPath);//格式化出命令字符串, 注意加上/c
va_start(argPtr, nNum);
for(i = 0; i < nNum; ++i)
{   
strcat(pszDelCmd, "\"");
strcat(pszDelCmd, *(char**)argPtr);
strcat(pszDelCmd, "\"");
if (i != nNum - 1)
{
strcat(pszDelCmd, " + ");
}
va_arg(argPtr, char**);
}  
        va_end(argPtr);
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = NULL;
shExecInfo.lpFile = szCmdPath;//cmd的路徑
shExecInfo.lpParameters = pszDelCmd;//程序參數,參數格式必須保證正確
shExecInfo.lpDirectory = szCurDir;//如果szFile是相對路徑,那個這個參數就會起作用
shExecInfo.nShow = SW_HIDE;//隱藏cmd窗口
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
WaitForSingleObject(shExecInfo.hProcess, INFINITE);//無限等待cmd窗口執行完畢
free(pszDelCmd);
}

調用方法:
BatchDelFile(2, "*.tcp.txt", "*.udp.txt");//第一個是文件個數,后面依次是文件路徑,文件路徑可以是相對路徑也可以是絕對路徑。

文件名數組的版本代碼如下:
void BatchDelFile(int nNum, char** pszFiles)
{  
int i;
char* pszDelCmd;
char szCurDir[MAX_PATH];
char szCmdPath[MAX_PATH];
SHELLEXECUTEINFO shExecInfo = {0};
pszDelCmd = (char*)malloc((nNum + 2)* MAX_PATH);
GetCurrentDirectory(MAX_PATH, szCurDir);//獲取當前路徑
GetSystemDirectory(szCmdPath, MAX_PATH);//獲取cmd路徑
strcat(szCmdPath, "\\cmd.exe");
sprintf(pszDelCmd, "%s /c del /f /q /s ", szCmdPath);//格式化出命令字符串, 注意加上/c
for(i = 0; i < nNum; ++i)
{   
strcat(pszDelCmd, "\"");
strcat(pszDelCmd, *(pszFiles + i));
strcat(pszDelCmd, "\"");
if (i != nNum - 1)
{
strcat(pszDelCmd, " + ");
}
}
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = NULL;
shExecInfo.lpFile = szCmdPath;//cmd的路徑
shExecInfo.lpParameters = pszDelCmd;//程序參數,參數格式必須保證正確
shExecInfo.lpDirectory = szCurDir;//如果szFile是相對路徑,那個這個參數就會起作用
shExecInfo.nShow = SW_HIDE;//隱藏cmd窗口
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
WaitForSingleObject(shExecInfo.hProcess, INFINITE);//無限等待cmd窗口執行完畢
free(pszDelCmd);
}

調用方法:
char* szFiles[2];
szFiles[0] = "*.tcp.txt";
szFiles[1] = "*.udp.txt";
BatchDelFile(2, szFiles);

posted on 2012-01-03 22:45 yx 閱讀(2308) 評論(6)  編輯 收藏 引用 所屬分類: Windows編程

評論

# re: 自定義函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口 2012-01-03 23:23 林羽飛揚

雖然看不懂,但是感覺很牛逼  回復  更多評論   

# re: 自定義可變參數函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口 2012-01-04 09:05 hyp

建議改成CreateProcess的,以后比較好擴展,比如以后要添加讀取CMD回顯之類的功能
我有個疑問,就是CMD命令有長度限制嗎?  回復  更多評論   

# re: 自定義可變參數函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口 2012-01-04 13:10 遠行

這個我也不清楚額,讀取執行結果的回顯倒是沒考慮過,我知道一種方法就是修改cmd命令把執行結果重定向到文件里面@hyp
  回復  更多評論   

# re: 自定義可變參數函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口 2012-01-04 13:11 遠行

呵呵,其實就是個簡單的東西@林羽飛揚
  回復  更多評論   

# re: 自定義可變參數函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口 2012-03-04 12:01 coreBugZJ

學習了。。。我想知道如何處理 使用了scanf,printf 的程序呢?比如,不顯示黑框,截獲輸入輸出。  回復  更多評論   

# re: 自定義可變參數函數BatchDelFile, 調用cmd批量刪除指定格式文件, Windows界面下不回顯Console窗口 2012-03-04 23:33 遠行

這個確實沒試過,要不試試重定向標準的流到文件,再用那些函數@coreBugZJ
  回復  更多評論   

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美国产日韩天堂区| 欧美超级免费视 在线| 噜噜噜久久亚洲精品国产品小说| 亚洲一区精品视频| 一区二区av在线| 一区二区三区精品久久久| 亚洲视频网在线直播| 亚洲淫性视频| 久久精品综合一区| 欧美本精品男人aⅴ天堂| 欧美大片专区| 亚洲国产精品成人va在线观看| 国产女主播视频一区二区| 国产精品人人做人人爽人人添| 国产婷婷97碰碰久久人人蜜臀| 国产免费一区二区三区香蕉精| 国内外成人在线视频| 亚洲大片在线观看| 一个色综合av| 久久免费观看视频| 模特精品在线| 亚洲午夜羞羞片| 久久免费的精品国产v∧| 欧美高清视频一区二区| 国产精品久久久久久久久搜平片 | 欧美性色视频在线| 国产在线日韩| 中文成人激情娱乐网| 久久精品国产清自在天天线 | 国产一区 二区 三区一级| 在线免费高清一区二区三区| 亚洲午夜精品网| 久久久久久电影| 99riav国产精品| 欧美专区在线观看一区| 欧美国产日韩一区二区三区| 国产伦精品一区二区三| 亚洲欧洲日韩在线| 欧美在线高清视频| 亚洲国产欧美一区二区三区久久 | 国产亚洲欧美日韩美女| 亚洲精选视频在线| 久久青青草原一区二区| 一区二区三区四区国产精品| 免费成人高清视频| 国产视频一区三区| 亚洲欧美在线看| 欧美成人有码| 欧美综合第一页| 国产精品美女视频网站| 亚洲老板91色精品久久| 久久综合中文色婷婷| 午夜精品久久久久久| 欧美色图五月天| 亚洲第一伊人| 宅男噜噜噜66一区二区66| 欧美黄色一区| 另类天堂av| 尤物yw午夜国产精品视频明星| 国产一区二区福利| 一本色道88久久加勒比精品 | 欧美不卡在线| 久久先锋影音| 一色屋精品视频在线看| 久久久久免费| 久久成人免费日本黄色| 国产亚洲欧美日韩在线一区| 翔田千里一区二区| 亚洲免费视频成人| 国产欧美亚洲日本| 久久精品国产亚洲一区二区三区 | 久久亚洲免费| 在线观看国产成人av片| 久久精选视频| 久久精品国产一区二区三区免费看| 国产午夜精品视频| 久久综合久久综合这里只有精品| 欧美一级专区| 伊人夜夜躁av伊人久久| 亚洲电影自拍| 免费美女久久99| 夜夜嗨av一区二区三区四区| 亚洲精品日本| 国产精品任我爽爆在线播放| 亚洲欧美一区二区原创| 性欧美1819sex性高清| 国产视频欧美| 欧美国产免费| 欧美激情在线狂野欧美精品| 亚洲深爱激情| 久久精品30| 亚洲精品老司机| 中文高清一区| 亚洲国产精品一区制服丝袜| 亚洲欧洲日韩综合二区| 国产美女精品视频| 欧美成人福利视频| 欧美日韩亚洲综合一区| 久久国产福利| 欧美搞黄网站| 欧美一区午夜视频在线观看| 另类av导航| 亚洲视频在线二区| 久久精品一级爱片| 亚洲精品一区二区三区在线观看 | 欧美人成网站| 小黄鸭精品aⅴ导航网站入口| 久久国产精品黑丝| 亚洲免费观看| 欧美一区二区| 亚洲一区二区在线免费观看视频| 久久久成人精品| 亚洲欧美日韩一区二区| 男同欧美伦乱| 久久久美女艺术照精彩视频福利播放 | 精品成人国产| 国产一区二区三区日韩欧美| 狠狠色丁香婷综合久久| 国产午夜精品久久久| 亚洲免费激情| 亚洲国产三级在线| 久久久久久久久久久久久久一区| 欧美韩日精品| 极品少妇一区二区| 久久综合九色综合网站| 国产午夜精品一区二区三区视频| 亚洲精品1区| 伊人久久综合97精品| 亚洲视频在线一区观看| 亚洲乱码国产乱码精品精天堂| 久久激情综合| 久久久蜜臀国产一区二区| 国产欧美日韩三级| 亚洲色无码播放| 制服丝袜激情欧洲亚洲| 蜜桃av久久久亚洲精品| 六月天综合网| 亚洲电影毛片| 久久久久中文| 免费一级欧美片在线播放| 国产一区美女| 久久久精品国产99久久精品芒果| 性欧美暴力猛交另类hd| 国产精品日韩欧美一区二区三区| 亚洲六月丁香色婷婷综合久久| 亚洲免费观看| 欧美图区在线视频| 一二三区精品福利视频| 亚洲欧美日韩精品久久久久| 国产精品成人va在线观看| 一区二区三区欧美日韩| 欧美一级欧美一级在线播放| 国产亚洲精品美女| 久久精品二区| 亚洲国产精品免费| 一区二区三区视频观看| 国产精品成人av性教育| 亚洲在线免费| 久久久久久亚洲精品杨幂换脸| 在线观看成人小视频| 欧美激情精品久久久六区热门| 亚洲国产婷婷香蕉久久久久久99| 亚洲人精品午夜| 欧美日韩国内| 亚洲综合精品| 久久一区亚洲| 亚洲日韩第九十九页| 欧美婷婷六月丁香综合色| 亚洲欧美不卡| 欧美成人四级电影| 亚洲视频国产视频| 国产日韩欧美日韩大片| 免费欧美在线| 亚洲欧美综合精品久久成人| 欧美福利视频在线| 亚洲一区二区在| 精品动漫一区| 欧美午夜精品久久久久免费视| 久久综合九色综合久99| 亚洲免费电影在线| 国产日韩欧美一区在线| 欧美福利网址| 香蕉成人久久| 亚洲人成亚洲人成在线观看图片| 亚洲欧美日韩一区在线| 在线观看亚洲精品| 国产精品播放| 欧美成人a∨高清免费观看| 亚洲午夜电影在线观看| 噜噜噜91成人网| 午夜精品免费在线| 亚洲精品乱码久久久久久黑人 | 国产欧美综合一区二区三区| 玖玖在线精品| 亚洲欧美日韩国产| 野花国产精品入口| 暖暖成人免费视频| 午夜亚洲视频| 亚洲影院高清在线| 一区二区三区成人|