在windows上用bat自动拉取服务器上的文件
记用BAT(批处理脚本)实现文件下载功能

[组图]记用BAT(批处理脚本)实现文件下载功能热荐【字体:小大】闲来无事之--记用BAT(批处理脚本)实现文件下载功能作者:ZV(ZVROP…文章来源: 点击数:4864 更新时间:2004-8-19作者:ZV(ZVROP)邮件:zvrop@主页:(被整顿掉老~~~~~>_<~~~~~~)网站:日期:2004-8-18转载请保全文档完整,谢谢写的仓卒繁多,错漏难免,还请各位给予斧正.有什么问题,可以给我发email.^_^...目录:一.写在前面的话二.故事的起因三.解决-腹稿四.解决-实战五.解决-打造六.包装七.小节八.后记九,参考文献正文开始:一.写在前面的话这篇文档讲述的并不是什么新鲜的技术,我只是起到将他们混和起来实现了自己需要的功能的作用,如果你对批处理和PE格式相当了解,那我的这篇文档就权且当作浏览温习吧...^_^...另外,由于我本人废话比较多,这也是不想给杂志写稿子的主要原因,给我干瘪瘪的3000字能讲出什么来,不如这样没有限制的爽快(当然也没什么报酬...一_一..),所以也为了防止你在看文章的途中睡着,请自备小锥子一把.....最后,这篇文档说是用批处理下载文件,其实它包含了很多方面的知识,如果有时间,不妨一看哈,^_^,开始买瓜了..二.故事的起因最初萌发这个想法的是不久前,在论坛(广告一下:)上的UNIX SHELL板块有个会员发了一篇帖子,内容是用BASH SHELL写的一个成批下载图片的脚本(其实是H图片...一_一..),接下来跟贴那个多啊...,有繁衍出PHP的,VBS的,C的,C#的,JAVA的,甚至交流到多线程,断点续传....引用花大哥的一句话"无语,为了MM照片,大家的动力都很足啊!"...汗~~..在发了一份PHP和C的代码后(感觉我动力特足~大色狼...一_一..),觉得很简单(因为用C 或者PHP等脚本来实现文件的下载本来就是很基础的东西)我就开始想用微软最原始的脚本--Batch(批处理)来尝试实现(本文标题中的"闲来无事"就是纪念此处,一_一.),这似乎有点不可思议,因为批处理几乎没有实现的支持网络的功能(当然,如果你说你能用TELNET下载到文件的我是很佩服的..一_一..),但也不是完全没有办法,毕竟WINDOWS里面能用的东西这么多,没有完不成的事情....在这种挑战的勾引下,我完成了用批处理下载文件的功能....现在让我一步一步回放我的思路,揭开用批处理下载文件的奥秘...三.解决-腹稿如果用批处理来下载文件的话,肯定会马上想到Cscript脚本(或者是JAVA脚本),那是当然,太多的批处理脚本实现一些本身并不可能实现的功能的时候都是采用ECHO出一个其他脚本的方法来解决.可是我们的目的就在于用批处理实现下载的功能,如果要用VBS来帮忙的话不如直接写VBS了.这个想法顺即告吹....再来,记得以前有流行过一阵用RUNDLL32来加载DLL中的API,似乎和我们需要的目的沾边,因为下载文件能用的API太多了,如果RUNDLL能调用,那最好不过了.于是我打开MSDN,找了一个API: URLDownloadToFileURLDownloadToFile函数原型:代码HRESULT URLDownloadToFile(LPUNKNOWN pCaller,LPCTSTR szURL,LPCTSTR szFileName,DWORD dwReserved,LPBINDSTATUSCALLBACK lpfnCB);URLDownloadToFile函数的一些信息:引用Header Urlmon.hImport library Urlmon.libMinimum availability Internet Explorer 3.0Minimum operating systems Windows NT 4.0, Windows 95根据这些,我们可以知道,这个API是在URLMON.DLL文件中的一个导出函数,简单的实现了把一个文件从WEB服务器下载本机的功能,其实用这个函数还不错的,至少它帮我们处理了断点续传,缓存等等的功能,比起直接使用SOCKET函数来实现或者用WININET里的函数来实现简单多得多了.URLDownloadToFile有五个参数:第一个参数是仅当调用者是一个ActiveX对象才使用,一般为NULL.第二个参数就是要下载文件的目标URL,完整路径.第三个是本地保存路径,也是完整路径第四个是保留,必须为0第五个是指向一个IBindStatusCallback接口的指针,这就类似一种回调机制,你可以参考这些来活动当前下载进度,选择是否继续下载等等.这里面我们只关心第二和第三个参数.其他的通通设置成0.(当然你写C的时候最好设置为NULL)嗯,敲了点键盘介绍了这个函数,是因为整篇的文档都和这个函数息息相关,有了这个函数,就可以呼叫RUNDLL32来调用它,但是很可惜,这个美好的计划马上也破裂了...我去微软看了他们的164787号文档(/default.aspx?...kb;en-us;164787),该文档阐述了RUNDLL32的调用方式和能被他调用的函数的格式:它们是这么说的:引用Rundll and Rundll32 programs do not allow you to call any exported function from any DLL. For example, you can not use these utility programs to call the Win32 API (Application Programming Interface) calls exported from the system DLLs. The programs only allow you to call functions from a DLL that are explicitly written to be called by them.这个是规定的格式:代码void CALLBACKEntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);很不幸,我们的URLDownloadToFile小兄弟并没有符合这些条件,被RUNDLL32无情的抛弃了(汗一滴..)...但是我们并没有因此而嫌弃它(汗一滴AGAIN..),毕竟,在后来实现的过程里,它是为我们的工作省下了不少功夫.到此,用RUNDLL32运行计划流产....(寒...)想了一根烟功夫,现在URLDownloadToFile有了,怎么才能调用这个函数呢?总不能模仿汇编PUSH 5个参数进栈,然后CALL吧,那这个函数的地址还要用LoadLibrary()和GetProcAddress()计算得来,那这两个函数的地址.....还是放弃...等等,如果用一个EXE来实现的话就简单很多了(至少EXE是不需要任何解释器的),对,写一个EXE来下载文件.可我们的目的是用BAT来下载呢,BAT文件能包裹EXE的数据吗?答案是肯定的...往下看..记得以前看过一篇文档<<Do All in Cmd Shell>>里面介绍过一种方法.先卖个关子.大家都知道,如果用ECHO加上重定向符来写文件的话,只能写入ASCII的一部分,也就可以显示出来的那些ASCII(也就是ASCII值小于128的那些),对于那些无法显示的字符就没有办法了.但是这让我们想起一个工具,一个微软历史上同样古老的,批处理的兄弟--DEBUG!现在思路清晰了:可以让批处理把ECHO不能显示的字符转化为16进制数据(比如EXE中的那些数据)保存在批处理中,然后用DEBUG写道文件里,最后用BAT调用生成的EXE,下载文件!(想完了这里,我感觉还是太麻烦,不知道哪位牛人对这个实现还有什么更加简单的办法吗??)四.解决-实战倘若就此编写一个可下载文件的EXE,然后直接用BAT包裹,定然会被同行耻笑,不单是因为那几千个字节的数据拖着大大臃肿的BAT文件,更加让为这种简单的想法立刻现形,为了不达到这些负面效果,也为了让这篇文档不至于干瘪瘪的让人感觉没什么看头(事实上是因为早些时候看过watercloud的一篇大作感悟颇深),我决定手工写一串16进制代码来代替机器编译的EXE.既美观了界面,又增强了技术性.....(一_一...简直是在卖作...)现在当务之急是要一个可以下载文件的EXE程序,实现这个目标只要一个URLDownloadToFile 即可,放在最后实现,先来写一个PE框架:大家都知道PE文件的格式吧,不懂的就去看看那个著名的电信黑客罗某某的书.(Who!?...~)先给出我们的PE框架,基于XP的FileAlignment对齐大小最小就支持到0x200(也就是10进制的512字节,以下有在前面加上0x的都表示16进制数值),我们的框架就打出512字节(注意,我下面留有空白表示各个PE部分,结合下面的文档,大家方便理解),这个框架里没有任何的代码或者数据:(ZV友情提示:下面是最枯燥的部分,各位手握锥子,要有一不怕苦,二不怕痛的精神看完它....)(如果定力不高的朋友,或者堆PE文件再熟悉不过的朋友,可以字节转到"JMP S1"处往下看.) (如果只想知道到底怎么回事,或者对这篇作文报浏览态度的朋友,可以直接转到"JMP S2"处继续浏览)(睡着了的继续睡觉....)代码Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F00000000 4D 5A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 MZ.............. 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 ............@...==============================================================================00000040 50 45 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 PE..L........... 00000050 00 00 00 00 70 00 0F 010B 01 00 00 00 02 00 00 ....p........... 00000060 00 00 00 00 00 00 00 00 79 01 00 00 00 00 00 00 ........y....... 00000070 00 00 00 00 00 00 40 00 00 10 00 00 00 02 00 00 ......@......... 00000080 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 ................ 00000090 00 30 00 00 00 02 00 00 00 00 00 00 02 00 00 00 .0.............. 000000A0 00 01 00 00 00 00 00 00 00 01 00 00 00 10 00 00 ................ 000000B0 00 00 00 00 02 00 00 0000 00 00 00 00 00 00 00 ................ 000000C0 28 11 00 00 28 00 00 00==============================================================================00 00 00 00 00 00 00 00 (...(........... 000000D0 00 02 00 00 00 10 00 00 00 02 00 00 00 01 00 00 ................ 000000E0 00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 60 ............`..` 000000F0 00 00 00 00 00 00 00 00 02 00 00 00 00 20 00 00 ............. .. 00000100 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000110 00 00 00 00 60 00 00 60 00 00 00 00 00 00 00 00 ....`..`........00000120 58 11 00 00 00 00 00 00 50 11 00 00 00 00 00 00 X.......P....... 00000130 00 00 00 00 6E 11 00 00 20 11 00 00 00 00 00 00 ....n... ....... 00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000150 58 11 00 00 00 00 00 0000 00 00 00 00 00 00 00 ................ 00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000001A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000001B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000001C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000001D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................这里简单介绍一下PE文件格式的组成:大致来分呢,PE格式文件可以分为这三个部分(就是上述框架中用"=="分割的三个部分): 引用+++++++++++++++++++++++++DOS信息部分 ++++++++++++++++++++++++++++++++++++++++++++++++++PE信息部分 ++++++++++++++++++++++++++++++++++++++++++++++++++数据部分 +++++++++++++++++++++++++下面来简单介绍每一部分的结构,首先的"DOS信息部分":引用++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++ ++ +[DOS文件头][0x40] + ++ +++++++++++++++++++++++++++++++++++++++ ++ + <==DOS信息部分+ +++++++++++++++++++++++++++++++++++++++ ++ +[DOS块][0x70,可变] + ++ +++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++这部分我觉得是最冗余的地方,首先DOS文件头的结构:代码typedef struct _IMAGE_DOS_HEADER { // DOS .EXE headerWORD e_magic; // Magic numberWORD e_cblp; // Bytes on last page of fileWORD e_cp; // Pages in fileWORD e_crlc; // RelocationsWORD e_cparhdr; // Size of header in paragraphsWORD e_minalloc; // Minimum extra paragraphs neededWORD e_maxalloc; // Maximum extra paragraphs neededWORD e_ss; // Initial (relative) SS valueWORD e_sp; // Initial SP valueWORD e_csum; // ChecksumWORD e_ip; // Initial IP valueWORD e_cs; // Initial (relative) CS valueWORD e_lfarlc; // File address of relocation tableWORD e_ovno; // Overlay numberWORD e_res[4]; // Reserved wordsWORD e_oemid; // OEM identifier (for e_oeminfo)WORD e_oeminfo; // OEM information; e_oemid specificWORD e_res2[10]; // Reserved wordsLONG e_lfanew; // File address of new exe header} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;其中最重要的就是e_lfanew,它指向了下面的"PE信息部分"的起始地址(也就是俗称的PE头部).其他的是一些DOS下运行这个PE文件必须的结构,比如看注解就明白,什么代码初始化堆栈段,初始化堆栈指针,入口IP,CS等等,都是在WIN32上没有用的东西,我就不翻译拉,这些都是说DOS下的,如果这个PE文件一开始就打定在WINDOWS下运行,这些乱写都无所谓,你甚至可以把你的名字都写进去(.....一_一..).当然,你这么作后这个文件就不能在DOS下运行了..不然当机是几乎可以肯定的....(寒....).需要记的除了e_lfanew是指向PE头的指针外还要记得这个DOS文件头结构长0x40,也就是64个字节.还有第一个参数e_magic,这个地方永远是"0x40 0x5a",也就是字符的"MZ".DOS块部分保存的就是一段DOS下可以执行的代码,比如现在大多编译器就简单的输出一个"This program cannot be run in DOS mode"的字符串,和"DOS信息部分"一样,如果你不打算在DOS执行这个EXE文件,那么这里完全可以删除,为什么?因为WIN32的PE装载器只关心"DOS信息部分"的e_lfanew指向的而已.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++。
BAT批处理文件教程

BAT批处理文件教程BAT(批处理)文件是Windows操作系统中的一种脚本文件,用于自动化执行一系列命令或任务。
下面是一个关于BAT批处理文件的教程,包含了基本语法、常用命令和一些高级技巧。
一、基本语法2.每个命令或任务在一行上完成,并以换行符或连字符“&&”分隔。
例如:```echo Hello World!pause```上述代码将先输出"Hello World!",然后暂停执行,直到用户按下任意键。
3.注释用REM命令,行开头添加“REM”或“::”。
例如:```REM这是一个注释::这也是一个注释```二、常用命令1. echo:用于输出文本到控制台。
例如:echo Hello World!```2. pause:暂停批处理文件的执行,并提示用户按下任意键继续。
例如:```pause```3. cls:清屏。
例如:```cls```4. cd:改变当前目录。
例如:```cd C:\Program Files```5. dir:显示目录中的文件和子目录。
例如:```dir6. copy:复制文件。
例如:```copy source.txt destination.txt```7. move:移动文件或重命名文件。
例如:```move source.txt destination.txt```8. del:删除文件。
例如:```del file.txt```9. if:条件语句,用于根据一些条件选择执行不同的命令。
例如:```if %ERRORLEVEL%==0echo Successelseecho Failure三、高级技巧1.变量:可以定义和使用变量。
例如:```set var=Helloecho %var%```2. 循环:可以使用for循环来重复执行命令。
例如:```for %%i in (1,2,3) doecho %%i```上述代码将输出数字1、2、33. 函数:可以使用call命令调用子程序。
文件名采集bat

示例输出结果
示例文件名:example.txt
示例路径:C:\Users\Username\Documents
示例结果:成功采集到example.txt文件名,并输出到控制台
示例说明:通过运行文件名采集bat脚本,可以快速获取指定路径下的所有文件名,并 将结果输出到控制台
04
注意事项
确保目标文件夹中没有同名文件
避免文件覆盖:在运行批处理文 件之前,请确保目标文件夹中没 有与将要创建或更新的文件同名 的文件。
谨慎操作:在运行批处理文件之 前,请仔细检查目标文件夹中的 文件列表,确保没有同名文件。
添加标题
添加标题
添加标题
添加标题
备份原文件:如果目标文件夹中 存在同名文件,建议先备份该文 件,以防止意外覆盖。
测试运行:在正式运行批处理文 件之前,可以先进行测试运行, 检查是否有同名文件存在。
注意文件名的编码格式
确保文件名只包含字母、数字和下划线,避免使用特殊字符。 文件名长度应控制在255个字符以内。 避免使用空格或特殊符号作为文件名的一部分。 文件名应具有描述性,方便识别和管理。
定期更新代码以适应操作系统变化
操作系统更新可能导致文件名规则发生变化 定期检查并更新代码以确保兼容性 及时关注操作系统更新通知并采取相应措施 测试更新后的代码以确保无误
解决方案:检查文件路径和文件名是否正确,确 保文件存在且可读
问题:脚本运行速度过慢 解决方案:优化脚本代码,减少 不必要的循环和操作,提高运行效率
解决方案:优化脚本代码,减少不必要的循环和 操作,提高运行效率
YOUR LOGO
THANK YOU
汇报人:XX
问题:运行脚本时出现错误 解决方案:检查脚本代码是否 有语法错误或逻辑错误,确保脚本文件名和路径正确
批处理bat文件实现复制、删除、创建文件夹、执行程序、打开文件

1 建bat文件自动执行复制,删除命令。
例1:以下是复制cd.dll文件至windows\system32的bat文件内容:copy cd.dll %windir%\system32例2:下面一行是卸载windows\system32目录中的cd.dll,即把上面复制的文件删除:del %windir%\system32\cd.dll例3:删除download文件夹中的文件,例子如下:del C:\DOWNLOAD\*.*[注意]:这里的del命令只能删文件,不能删文件夹。
要删除文件夹得用rd命令,如下:rd Filemon这里filemon文件夹和该bat文件在同一目录下,就省去具体路径了。
但rd只能删除空文件夹.要删除文件夹及其里面的所有子目录和文件,用rd命令带/s /q参数,/s参数表示删除该文件夹及其下面的子目录和文件/q参数表示,不需要确认范例如下:rd 123 /s /q2 创建文件夹例:在E:\My documents下面一次创建3个新文件夹:Newfolder1,Newfolder2,Newfolder3@echo offmd "E:\My documents\Newfolder1"md "E:\My documents\Newfolder2"md "E:\My documents\Newfolder3"3 执行程序,打开文件例1:执行C盘下的WinWord.exe程序start C:\WinWord.exe例2:用某个程序打开某个文件,如用TheWorld.exe打开一个htm文件start d:\TheWorld\TheWorld.EXE C:\我有一个恋爱.htm[注意]:不论是程序或文件路径中含有空格,都必须用引号括起来:start d:\TheWorld\TheWorld.EXE "e:\My documents\我有一个恋爱.htm"所有程序中的引号不能是全角的,必须用半角的格式,所以输入引号前最好关闭汉字输入系统XCOPY 还有众多的功能,是加参数来完成的。
WindowsBat命令常用操作

WindowsBat命令常⽤操作1 echo 和 @回显命令@ #关闭单⾏回显echo off #从下⼀⾏开始关闭回显@echo off #从本⾏开始关闭回显。
⼀般批处理第⼀⾏都是这个echo on #从下⼀⾏开始打开回显echo #显⽰当前是 echo off 状态还是 echo on 状态echo. #输出⼀个”回车换⾏”,空⽩⾏#(同echo, echo; echo+ echo[ echo] echo/ echo)2 errorlevelecho %errorlevel%每个命令运⾏结束,可以⽤这个命令⾏格式查看返回码默认值为0,⼀般命令执⾏出错会设 errorlevel 为13 dir显⽰⽂件夹内容dir #显⽰当前⽬录中的⽂件和⼦⽬录dir /a #显⽰当前⽬录中的⽂件和⼦⽬录,包括隐藏⽂件和系统⽂件dir c: /a:d #显⽰ C 盘当前⽬录中的⽬录dir c: /a:-d #显⽰ C 盘根⽬录中的⽂件dir c: /b/p #/b只显⽰⽂件名,/p分页显⽰dir *.exe /s #显⽰当前⽬录和⼦⽬录⾥所有的.exe⽂件4 cd切换⽬录cd #进⼊根⽬录cd #显⽰当前⽬录cd /d d:sdk #可以同时更改盘符和⽬录5 md创建⽬录md d:abc #如果 d:a 不存在,将会⾃动创建中级⽬录#如果命令扩展名被停⽤,则需要键⼊ mkdir abc。
6 rd删除⽬录rd abc #删除当前⽬录⾥的 abc ⼦⽬录,要求为空⽬录rd /s/q d:temp #删除 d:temp ⽂件夹及其⼦⽂件夹和⽂件,/q安静模式7 del删除⽂件del d:test.txt #删除指定⽂件,不能是隐藏、系统、只读⽂件del /q/a/f d:temp*.*删除 d:temp ⽂件夹⾥⾯的所有⽂件,包括隐藏、只读、系统⽂件,不包括⼦⽬录del /q/a/f/s d:temp*.*删除 d:temp 及⼦⽂件夹⾥⾯的所有⽂件,包括隐藏、只读、系统⽂件,不包括⼦⽬录8 ren重命名命令ren d:temp tmp #⽀持对⽂件夹的重命名9 cls清屏10 type显⽰⽂件内容type c:boot.ini #显⽰指定⽂件的内容,程序⽂件⼀般会显⽰乱码type *.txt #显⽰当前⽬录⾥所有.txt⽂件的内容11 copy拷贝⽂件copy c:test.txt d:test.bak复制 c:test.txt ⽂件到 d: ,并重命名为 test.bakcopy con test.txt从屏幕上等待输⼊,按 Ctrl+Z 结束输⼊,输⼊内容存为test.txt⽂件con代表屏幕,prn代表打印机,nul代表空设备copy 1.txt + 2.txt 3.txt合并 1.txt 和 2.txt 的内容,保存为 3.txt ⽂件如果不指定 3.txt ,则保存到 1.txtcopy test.txt +复制⽂件到⾃⼰,实际上是修改了⽂件⽇期12 title设置cmd窗⼝的标题title 新标题 #可以看到cmd窗⼝的标题栏变了13 ver显⽰系统版本14 label 和 vol设置卷标vol #显⽰卷标label #显⽰卷标,同时提⽰输⼊新卷标label c:system #设置C盘的卷标为 system15 pause暂停命令16 rem 和 ::注释命令注释⾏不执⾏操作17 date 和 time⽇期和时间date/t #只显⽰当前⽇期,不提⽰输⼊新⽇期time #显⽰当前时间,并提⽰输⼊新时间,按"回车"略过输⼊time/t #只显⽰当前时间,不提⽰输⼊新时间18 goto 和 :跳转命令:label #⾏⾸为:表⽰该⾏是标签⾏,标签⾏不执⾏操作goto label #跳转到指定的标签那⼀⾏19 find (外部命令)查找命令find "abc" c:test.txt在 c:test.txt ⽂件⾥查找含 abc 字符串的⾏如果找不到,将设 errorlevel 返回码为1find /i “abc” c:test.txt查找含 abc 的⾏,忽略⼤⼩写find /c "abc" c:test.txt显⽰含 abc 的⾏的⾏数20 more (外部命令)逐屏显⽰more c:test.txt #逐屏显⽰ c:test.txt 的⽂件内容21 tree显⽰⽬录结构tree d: #显⽰D盘的⽂件⽬录结构22 &顺序执⾏多条命令,⽽不管命令是否执⾏成功23 &&顺序执⾏多条命令,当碰到执⾏出错的命令后将不执⾏后⾯的命令find "ok" c:test.txt && echo 成功如果找到了"ok"字样,就显⽰"成功",找不到就不显⽰24 ||顺序执⾏多条命令,当碰到执⾏正确的命令后将不执⾏后⾯的命令find "ok" c:test.txt || echo 不成功如果找不到"ok"字样,就显⽰"不成功",找到了就不显⽰25 |管道命令dir *.* /s/a | find /c ".exe"管道命令表⽰先执⾏ dir 命令,对其输出的结果执⾏后⾯的 find 命令该命令⾏结果:输出当前⽂件夹及所有⼦⽂件夹⾥的.exe⽂件的个数type c:test.txt|more这个和 more c:test.txt 的效果是⼀样的26 > 和 >>输出重定向命令> 清除⽂件中原有的内容后再写⼊>> 追加内容到⽂件末尾,⽽不会清除原有的内容主要将本来显⽰在屏幕上的内容输出到指定⽂件中指定⽂件如果不存在,则⾃动⽣成该⽂件type c:test.txt >prn屏幕上不显⽰⽂件内容,转向输出到打印机echo hello world>con在屏幕上显⽰hello world,实际上所有输出都是默认 >con 的copy c:test.txt f: >nul拷贝⽂件,并且不显⽰"⽂件复制成功"的提⽰信息,但如果f盘不存在,还是会显⽰出错信息copy c:test.txt f: >nul 2>nul不显⽰”⽂件复制成功”的提⽰信息,并且f盘不存在的话,也不显⽰错误提⽰信息echo ^^W ^> ^W>c:test.txt⽣成的⽂件内容为 ^W > W^ 和 > 是控制命令,要把它们输出到⽂件,必须在前⾯加个 ^ 符号27 <从⽂件中获得输⼊信息,⽽不是从屏幕上⼀般⽤于 date time label 等需要等待输⼊的命令@echo offecho 2005-05-01>temp.txtdate <temp.txtdel temp.txt这样就可以不等待输⼊直接修改当前⽇期28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*命令⾏传递给批处理的参数%0 批处理⽂件本⾝%1 第⼀个参数%9 第九个参数%* 从第⼀个参数开始的所有参数批参数(%n)的替代已被增强。
bat文件命令大全

bat文件命令大全在计算机操作系统中,bat文件是一种批处理文件,它包含了一系列的命令,可以被操作系统执行。
在Windows操作系统中,bat文件是一种常见的批处理文件格式,通过编写一系列的命令,可以实现自动化的任务执行。
本文将为大家介绍bat文件中常用的命令,帮助大家更好地理解和使用bat文件。
1. echo命令。
echo命令用于在屏幕上显示文本或者将文本输出到文件中。
在bat文件中,可以使用echo命令输出一些提示信息,或者将一些结果输出到日志文件中。
例如:echo "Hello, World!" 将在屏幕上显示Hello, World!echo "Hello, World!" > output.txt 将Hello, World!输出到output.txt文件中。
2. cd命令。
cd命令用于改变当前目录。
在bat文件中,可以使用cd命令切换到指定的目录,以便后续的命令可以在指定的目录下执行。
例如:cd /d D:\test 切换到D盘下的test目录。
3. dir命令。
dir命令用于列出指定目录中的文件和子目录。
在bat文件中,可以使用dir命令查看指定目录中的文件列表。
例如:dir /s 列出当前目录及其子目录中的所有文件和子目录。
4. copy命令。
copy命令用于复制文件。
在bat文件中,可以使用copy命令将文件从一个位置复制到另一个位置。
例如:copy file1.txt D:\backup 将file1.txt文件复制到D盘下的backup目录中。
5. del命令。
del命令用于删除文件。
在bat文件中,可以使用del命令删除指定的文件。
例如:del file1.txt 删除file1.txt文件。
6. move命令。
move命令用于移动文件。
在bat文件中,可以使用move命令将文件从一个位置移动到另一个位置。
例如:move file1.txt D:\backup 将file1.txt文件移动到D盘下的backup目录中。
批量拷贝Windows文件脚本

批量拷贝Windows文件脚本使用Windows操作系统时,有时我们需要将大量的文件从一个位置复制到另一个位置。
手动一个个复制文件耗时且繁琐,这时我们可以使用脚本来批量拷贝文件,提高工作效率。
下面是一个简单的批量拷贝Windows文件的脚本示例:```bat@echo offset source_folder=C:\sourceset destination_folder=C:\destinationxcopy /s /i /q /y "%source_folder%\*" "%destination_folder%\"```以上脚本会将源文件夹中的所有文件(包括子文件夹)复制到目标文件夹中。
下面是对脚本的详细解释:1. `@echo off`:这行代码设置脚本在执行时不在命令行窗口显示具体执行的命令,以保持界面整洁。
2. `set source_folder=C:\source`:这行代码设置源文件夹的路径。
请根据实际情况修改 `C:\source` 为你所需的文件夹路径。
3. `set destination_folder=C:\destination`:这行代码设置目标文件夹的路径。
请根据实际情况修改 `C:\destination` 为你想要将文件复制到的目标文件夹路径。
4. `xcopy /s /i /q /y "%source_folder%\*" "%destination_folder%\"`:这行代码使用xcopy命令进行文件复制。
具体解释如下:- `/s`:复制包括子目录中的文件。
- `/i`:如果目标路径包含不存在的目录或者文件,xcopy会自动创建它们。
- `/q`:安静模式,不显示复制过程。
- `/y`:在复制之前不提示是否覆盖已存在的文件。
- `"%source_folder%\*"`:源文件夹路径,加上`\*`表示复制该路径下的所有文件和文件夹。
bat命令大全

bat命令大全BAT命令大全。
BAT命令是Windows操作系统中的批处理命令,可以通过简单的文本文件来批量执行一系列的命令。
在日常工作中,熟练掌握BAT命令可以极大地提高工作效率。
本文将为大家详细介绍BAT命令的使用方法和常见的命令大全。
一、常用的BAT命令。
1. @echo off。
这个命令用于关闭命令行窗口的回显功能,可以在批处理文件的开头使用,以避免在执行命令时显示命令本身。
2. echo。
echo命令用于在命令行窗口中显示文本信息,可以用来输出提示信息或者调试信息。
3. pause。
pause命令用于暂停批处理文件的执行,等待用户按下任意键后继续执行下面的命令。
4. cd。
cd命令用于改变当前目录,可以通过cd命令切换到指定的目录。
5. dir。
dir命令用于显示当前目录中的文件和子目录的列表,可以通过dir命令查看当前目录下的文件和文件夹。
6. copy。
copy命令用于复制文件或者目录,可以通过copy命令将文件从一个目录复制到另一个目录。
7. del。
del命令用于删除文件,可以通过del命令删除指定的文件。
8. move。
move命令用于移动文件或者目录,可以通过move命令将文件从一个目录移动到另一个目录。
9. start。
start命令用于启动一个新的命令行窗口或者程序,可以通过start命令打开指定的程序或者文件。
10. taskkill。
taskkill命令用于结束指定的进程,可以通过taskkill命令关闭指定的程序或者进程。
以上是常用的BAT命令,掌握这些命令可以满足日常工作中的大部分需求。
当然,BAT命令还有很多其他的命令,可以根据具体的需求进行学习和使用。
二、BAT命令的使用方法。
1. 编写BAT文件。
使用BAT命令需要先编写一个BAT文件,可以使用记事本等文本编辑工具来创建BAT文件。
在BAT文件中,可以按照顺序写入需要执行的命令,每个命令占据一行。
2. 运行BAT文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果远程机器开了ftp服务,那么可以在win上用ftp命令拉取。
脚本如下
FTP.bat
:路径写在bat文件中,可以支持中文路径
@echo off
:记载每次执行的年月日到一个日志文件中 可以自行修改
echo %date:~0,10%>>D:\Win7系统文件夹\Desktop\工作\日常检查\日志归档\我用的
FTP\v1.1\ftp.log
:进入D盘 cmd中的固定写法 必须先进入D盘才能进入到D盘下面的目录
D:
:进入到D盘的某个目录 此处将作为ftp获取文件后的默认目录
cd D:\Win7系统文件夹\Desktop\工作\日常检查\日志归档
:ftp命令 参数引用ftp.txt
ftp s:D:\Win7系统文件夹\Desktop\工作\日常检查\日志归档\我用的FTP\v1.1\ftp.txt>>D:\Win7系统文件夹\Desktop\工作\日常检查\日志归档\我用的FTP\v1.1\ftp.log
:退出
exit
ftp.txt的内容如下 红色部分为注释 请删除
prompt off关闭交互模式
open 133.64.94.99连接到哪台机器
oracle用户名
Pdh2_ab密码
cd /home/oracle
mget sun_check_*log*批量获取sun_check_*log*格式的文件 *为通配符
mdelete sun_check_*log*批量删除sun_check_*log*格式的文件 如果只删除一个文件 并知道具体文件名的话 也可以用delete命令 语法相同 但是delete命令只支持一次删一个 且不支持通配符close关闭该连接
bye退出FTP模式
如果有多台机器需要操作 则在txt文件中重复open到close的内容
有些远程机器仅打开了sftp服务 win上并不支持该命令 此时想要达到童谣的目的,则需要安装winscp
官档为https:///eng/docs/lang:chs 此软件免费 直接下载安装即可 中途一直下一步 和安装一个QQ一样简单 我安装的路径在 d:\Program Files\WinSCP
新建一个sftp.bat文件 内容如下
D:
cd d:\Program Files\WinSCP
winscp.exe /console /command "option batch continue" "option confirm off" "option transfer binary" /script=D:\Win7系统文件夹\Desktop\工作\日常检查\日志归档\winscp\sftp.txt /log=D:\Win7系统文
件夹\Desktop\工作\日常检查\日志归档\sftp.log
:command后面跟的是所有使用到的命令参数每个参数用双引号引起来 以空格隔开 option batch continue默认批处理 option confirm off 关闭提示信息 option transfer binary使用二进制格式传送
:script=后面跟的是txt文件位置 此参数可省略 把相关参数以命令的形式全部写在bat里 但是这样的话就必须全部写在一行里 看起来比较长 也比较费事 格式如winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://user:pwd@ip:port" "option transfer binary" "put D:\需要上传的文件路径 /服务器文件存放目录" "exit" /log=
:/log=输出log所在的位置
:如果上面用到了txt配置参数 如我这里 则新建sftp.txt 内容如下
open sftp://oracle:Pdh2_ab@133.64.94.99 hostkey=*
get /home/oracle/sun_check_*log* D:\Win7系统文件夹\Desktop\工作\日常检查\日志归档\
rm /home/oracle/sun_check_*log*
参照FTP的txt相信能看懂 如果有多台机器 重复你需要的内容即可
sftp第一次连接服务器的时候会提示你输入y确认key信息,否则连接失败。
脚本是为了自动化服务,没时间输入y,所以加上 hostkey=*参数。