如何编写bat批处理,批量操作使重复的工作一步到位(二)bat文件的编写

如何编写bat批处理,批量操作使重复的工作一步到位(二)bat文件的编写

    • 使用bat文件帮我达到什么效果
    • 使用的批处理命令

上面介绍了如何建立、修改和使用bat批处理文件。现在我举一个实用的例子来为大家简单介绍,在日常生活或工作中如何使用bat批处理文件来使自己的操作更简单。
我们日常工作中,很多公司会开展在线共享文档、协同操作。但由于公司流程要求我们还需要另外备份自己的所有工作文档到公司Owncloud,以防电脑突发硬件问题而导致资料损毁。Owncloud的特性是需要设定一个文件夹,在开启客户端的时候,Owncloud会自动同步此文件夹里的所有资料。
我决定使用批处理文件来协助自己备份资料,原因有三:
1.我们并不想直接在同步文件夹里对文档进行修改,这样会经常出现我的版本跟别人load出来的不一致。
2.我们又发现,经常修改某些其它位置的文档后,我们不一定会记得copy一份到同步文件夹里自动备份。
3.而且我们本身电脑硬盘里的资料处于各个不同路径的文件夹,如果每次备份都要手动copy paste到同一个共享文件夹里,并且都压缩好,改好文件名字,这步骤真是每天都会做到怀疑人生!

使用bat文件帮我达到什么效果

简单一步双击鼠标,把各个文件夹需要备份的文档都复制一份到共享文件夹。与此同时并把需要压缩的都压缩了,需要以日期命名的都命名了。

使用的批处理命令

接下来我就开始介绍一下,要达到这个效果,我需要使用到的批处理命令有哪些:

  • 更改访问路径
    我们使用cd命令,后面紧跟着完整的路径。只要路径没有写错,回车后会立马转到你要操作的目标文件夹里。
C:\>cd C:\Users\Administrator
C:\Users\Administrator>
  • 建立及删除文件夹
    建立文件夹:
    使用md命令建立文件夹回车后得到一个新的文件夹叫“transfer”
C:\Users\Administrator>md transfer

C:\Users\Administrator>cd transfer

C:\Users\Administrator\transfer>

删除文件/文件夹:
说到删除文件使用del命令来达到,举个例子说一下使用方法如下:
del “path\to\file”

C:\>cd C:\Users\Administrator\transfer
C:\Users\Administrator\transfer>del *.7z

但如果要同时删除文件夹的话情况相对有点复杂,需要编辑更复杂的多个命令来达到。可以参考这位歪果仁盆友的帖子:How to delete all files and folders in a folder by cmd call
我们把这个节选出来的bat命令复制下来:按照他原来的命名为mydel.bat另外保存成一个bat文件。

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%

当我们需要使用mydel.bat来清空某个路径下的所有文件以及文件夹的时候,我们可以这么使用:
mydel.bat “path\to\folder with spaces”
mydel.bat “path\to\file_or_folder”
目标文件夹路径需要有双引号引起来,不然会出现查无此路径的错误。

C:\>call mydel.bat "C:\Users\Administrator\transfer"

这样就可以把transfer里面的所有子文件夹以及所有存在的文件都清掉了,transfer文件夹里将会干净如新建。

  • 复制及粘贴文件
    在命令行里并没有专门的粘贴paste命令,这个粘贴的功能是包含在copy命令里。而且此时copy命令仅仅对文件生效,无法跟windows鼠标操作那样对文件夹及其子文件夹生效。
    copy命令的格式如下:
    copy file ”destination_path\to\folder“
    目标文件夹路径需要有双引号引起来,不然会出现查无此路径的错误,这个跟我们直接在命令提示符里面敲命令有所不同。
C:\>copy scan.txt "C:\Users\Administrator\transfer"
  • 自动以日期命名文件夹
    我们采用多个命令,从采集日期字符信息到粘贴信息到命名文件夹里:
    1)日期字符采集:
    我们用两个%括住中间要截取的字符串,这里我们截取的是date命令所输出的结果里的部分内容。在windows中文版里,我们在命令提示符里打date命令然后回车会得到以下结果:
C:\>date
当前日期: 2019/05/25 周六
输入新日期: (年月日)

- 可以看出输出结果是2019/05/25 周六,如果我们要获取0525这样的字符串,我们就可以首先要开始从左到右数,“/”也算一个字符。因此我们使用%date:5,2%来告诉系统,我们要截取的是从左数起第5个字符后截取两个字符,这样就成功获得了05。我们要继续截取25的话,我们只需要再次添加%date:8,2%就可以成功截取25了。
- 我们可以直接引用str变量来命名文件夹,此处用到的也是两个%包着变量名。如下例:md %str% 。
- 下面的代码可以自动在指定路径下生成一个由当天日期命名的文件夹。

C:\>set str=%date:~5,2%%date:~8,2%
C:\>cd C:\Users\Administrator\transfer
C:\Users\Administrator\transfer>md %str%
C:\Users\Administrator\transfer>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 xxxx-xxxx

 C:\Users\Administrator 的目录

2019/05/25  18:43              .
2019/05/25  18:43              ..
2019/05/25  18:43              0525
  • 7zip的命令行,实现自动打包文件
    *-*首先安装7-zip软件,这里举例子安装路径为 C:\Program Files\7-Zip,我们要更改当前操作路径为7-zip。
    *-*然后调动7z批处理命令,根据7z的用法如下:Usage: 7za […] […]
    [<@listfiles…>]
    这里我们举个例子:7z a -t7z “C:\Users\Administrator%str%.7z” “C:\Users\Administrator%str%”
    在这里,我们加上参数a ;-t7z是把指定的文件夹压缩为后缀名为.7z的文件。
C:\Program Files>cd 7-Zip
C:\Program Files\7-Zip>7z a -t7z "C:\Users\Administrator\%str%.7z" "C:\Users\Administrator\%str%"
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21
Scanning the drive:
1 folder, 0 files, 0 bytes
Creating archive: C:\Users\Administrator\0525.7z
Add new data to archive: 1 folder, 0 files, 0 bytes
Files read from disk: 0
Archive size: 82 bytes (1 KiB)
Everything is Ok

你可能感兴趣的:(windows,windows)