最近 工作中用到windows的脚本命令处理文件,这里记录一下;

首先是xcopy,

这个命令我们可以在cmd里去使用 xcopy/?

C:\Users\Administrator>xcopy/?
复制文件和目录树。

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                           [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                           [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
                           [/EXCLUDE:file1[+file2][+file3]...]

  source       指定要复制的文件。
  destination  指定新文件的位置和/或名称。
  /A           仅复制有存档属性集的文件,但不更改属性。
  /M           仅复制有存档属性集的文件,并关闭存档属性。
  /D:m-d-y     复制在指定日期或指定日期以后更改的文件。
               如果没有提供日期,只复制那些源时间比目标时间新的文件。
  /EXCLUDE:file1[+file2][+file3]...
               指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。
               如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制
               该文件。例如,指定如 \obj\ 或 .obj 的字符串会分别排除目录
               obj 下面的所有文件或带有 .obj 扩展名的所有文件。
  /P           创建每个目标文件之前提示您。
  /S           复制目录和子目录,不包括空目录。
  /E           复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T。
  /V           验证每个新文件的大小。
  /W           提示您在复制前按键。
  /C           即使有错误,也继续复制。
  /I           如果目标不存在,且要复制多个文件,则假定目标必须是目录。
  /Q           复制时不显示文件名。
  /F           复制时显示完整的源文件名和目标文件名。
  /L           显示要复制的文件。
  /G           允许将加密文件复制到不支持加密的目标。
  /H           也复制隐藏文件和系统文件。
  /R           覆盖只读文件。
  /T           创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括
               空目录和子目录。
  /U           只复制已经存在于目标中的文件。
  /K           复制属性。一般的 Xcopy 会重设只读属性。
  /N           用生成的短名称复制。
  /O           复制文件所有权和 ACL 信息。
  /X           复制文件审核设置(隐含 /O)。
  /Y           取消提示以确认要覆盖现有目标文件。
  /-Y          要提示以确认要覆盖现有目标文件。
  /Z           在可重新启动模式下复制网络文件。
  /B           复制符号链接本身与链接目标相对。
  /J           复制时不使用缓冲的 I/O。推荐复制大文件时使用。

开关 /Y 可以预先在 COPYCMD 环境变量中设置。
这可能被命令行上的 /-Y 覆盖。

接下来开始使用:

先创建一个 .bat文件,然后编辑:

首先一个简单的示例:

把D:\data文件夹下面的目录文件copy到D:\data_bk文件夹下面;

@echo off
echo "copy file"
echo.
xcopy D:\data D:\data_bk /s /e
pause

下面来一个复杂一点的:

%date:~0,4%%date:~5,2%%date:~8,2%

%date:~0,4%%date:~5,2%%date:~8,2% = 20190401

如下命令,是把D:\wxyData\day20190401下的文件,复制到E盘下面的E:\wxyData\day20190401文件夹下面;

@echo off
echo "copy file"
rem 这里是时间格式,年月日 例:20190401
echo  %date:~0,4%%date:~5,2%%date:~8,2%
echo.
xcopy D:\wxyData\day%date:~0,4%%date:~5,2%%date:~8,2%  E:\wxyData\day%date:~0,4%%date:~5,2%%date:~8,2% /s /e /i /y
rem 正常使用时可以不带下面的pause,它适合用来调试,即打开一个cmd窗口
pause

rem

echo

后面 带的参数解释:

/s  复制目录和子目录,不包括空目录

/e  复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T。

/i  如果目标不存在,且要复制多个文件,则假定目标必须是目录。

/y  取消提示以确认要覆盖现有目标文件。

简单来说,就是会复制目录,且自动覆盖目标路径中的文件,不需要手动去确认;

之后保存,然后双击运行.bat文件,就可以了;

目前本地拷贝已经OK了;

==============================================================================

接下来看一个从ftp服务器上下载文件到本地;

直接上脚本命令:

@echo off
echo "copy file from ftp server"
echo  %date:~0,4%%date:~5,2%%date:~8,2%
echo.

set Pan=E:\wxyData\
set AFolder=SourceDay%date:~0,4%%date:~5,2%%date:~8,2%\  
 if exist %Pan%%AFolder% (         
        rem 目录E:\wxyData\<span style="font-family: Arial, Helvetica, sans-serif;">SourceDay%date:~0,4%%date:~5,2%%date:~8,2%</span>已存在,无需创建  
        echo this %Pan%%AFolder% is aleary existed
    ) else (  
        rem 创建E:\wxyData\SourceDay%date:~0,4%%date:~5,2%%date:~8,2%  
        echo create %Pan%%AFolder%         
        md %Pan%%AFolder%  
    )  

rem 指定FTP用户名
set ftpUser=xxx
rem 指定FTP密码
set ftpPass=xxxooo
rem 指定FTP服务器地址
set ftpIP=192.168.xx.xx
rem 指定待下载的文件位于FTP服务器的哪个目录
set ftpFolder=abc\SourceDay%date:~0,4%%date:~5,2%%date:~8,2%
rem 指定从FTP下载下来的文件存放到本机哪个目录
set LocalFolder=E:\wxyData\SourceDay%date:~0,4%%date:~5,2%%date:~8,2%
rem  temp 目录
set tempFolder=F:\tempftp.txt

set ftpFile=%tempFolder%
>"%ftpFile%" (
    echo,open %ftpIP%
    echo,user %ftpUser% %ftpPass%
    echo cd "%ftpFolder%"
    echo lcd "%LocalFolder%"
    echo prompt off
    echo bin
    echo mget *.*
    echo bye
)
start /wait ftp -n -s:"%ftpFile%" 
del %ftpFile%
pause

这里还做了一个判断目标文件夹是否存在,如果不存在则创建文件夹;

对了,还有一点,

要使用管理员权限去运行;

 

the end;