谈科技 赏影视
享生活 览世界

用批处理的for、if命令选择性复制文件名不确定的文件

批处理的xcopy命令和windows的计划任务程序可以用于搭建简易的文件备份功能。通常,我们只需要整体复制或排除项目复制文件(夹),但有的时候则需要选择性的复制文件,比如下面这个需求。

usebatcopyfromttot2withxxstartyyendzzmid

上图中是一个实际需求的模拟场景(将某文件夹中以new开头,1结尾,中间字符不确定的txt文件复制到另一个文件夹备份),目的是在不同时间点选择性的复制文件,避免不必要的整体复制,节省磁盘开销。

不同时间点这个需求可以用计划任务实现,选择性复制则用批处理的for、if命令来实现。利用for来循环识别文件还可以使用通配符“*”和“?”进行配合,因此很快就可以想到如下命令:

for %%i in (F:\t\new*1.txt) do (xcopy ……)

这个命令在逻辑上是没有太大问题的,但是还需要考虑特殊的细节。首先,循环的自增则需要在之前加入“setlocal enabledelayedexpansion”。其次,由于CMD存在短路径/文件名的识别问题(例如 ~1 也起通配的作用),“new*1”则恰好会被识别为所有以new开头的文件(简单的说new*1会被识别为new~1),而“new*2”等则不会存在这个问题。因此,需要对之前的命令进行改进,加入if和for配合使用,命令如下:

@echo off
setlocal enabledelayedexpansion

for %%i in (F:\t\new*.txt) do (
set var=%%i
if “!var:~-5,1!”==”1” (
xcopy /y “!var!” “F:\t2\”
) else ……
)

以上这段代码改进在于先将以new开头的文本文件识别出来,再判断完整文件名倒数第5位是不是数字“1”,这样就满足需求了。

转载请注明出处:光影线 » 用批处理的for、if命令选择性复制文件名不确定的文件

分享到:更多 ()

相关推荐

  • 暂无文章