标题: [文件操作] 批处理如何将文件夹中的文件按条件比对后移动至另一文件夹 [打印本页]
作者: qin863132 时间: 2018-10-8 16:25 标题: 批处理如何将文件夹中的文件按条件比对后移动至另一文件夹
各位大神,请教个问题,我有批PDF的图纸,最后一位为图纸版本号,是以_,A,B,C......Z的顺序判断版本。文件名有12位,有13位。
现在需要将文件夹里的旧版本图纸全部移动至另一个文件夹,保留最新版本在原文件夹,这个判断该怎么写?
如图所示,需要将框选的文件移动到另一个文件夹保存。
作者: xczxczxcz 时间: 2018-10-8 17:46
本帖最后由 xczxczxcz 于 2018-10-8 17:51 编辑
以 “_” “A” “B”结尾的为旧文档?
好你看明白了点,是比较后两位字符大小的问题。
作者: xczxczxcz 时间: 2018-10-8 19:44
回复 1# qin863132
未做优化,文件夹名自己看情况改。用临时文件方法,少动脑细胞:- @echo off & setlocal EnableDelayedExpansion
- pushd "%~dp0"
- MD 旧图纸备份>nul 2>nul
- MD tmp>nul 2>nul
- for /f "delims=" %%a in ('dir/a-d/b *.pdf') do (
- set "str=%%~na" & set "str=!str:~0,-2!"
- md tmp\!str!\ >nul 2>nul
- cd.>tmp\!str!\%%a
- )
- for /d %%a in ("tmp\*") do (
- call :NEW "%%a" old
- for /f "delims=" %%e in ('dir/a-d/b *.pdf') do (
- set "name=%%~ne"
- if /i "!name:~0,-2!"=="%%~nxa" if "%%e" neq "!old!" move /y "%%e" "旧图纸备份\"
- )
- )
- rd /q /s tmp>nul 2>nul
- pause & exit
- :NEW
- for /f "delims=" %%a in ('dir/a-d/b "%~1\*" ^|sort /r') do (set "%2=%%a" & goto :eof )
复制代码
================================
作者: /zhqsystem/zhq 时间: 2018-10-8 22:20
最后四个不规则无法区分版本号
- :虚拟引入
- del/q ".\不规则的完整路径.log"
- for /f "delims=" %%i in ('dir/a-d/s/b ".\*.pdf"')do (
- set "notmove=%%~nxi"
- if /i "!notmove!"=="!notmove:_=!" echo/&echo,不规则的文件和路径:%%~nxi ;%%~dpi&&(echo,%%~fi)>>".\不规则的完整路径.log"
- for /f "tokens=1,* delims=_" %%j in ("%%~nxi")do (
- set "_=000000%%~nk"
- set "_=%%j_!_:~-5!%%~xi"
- set "#%%j_!_:~-5!%%~xi=%%~fi"
- )
- )
- set "_="&&set "notmove="
- :最终保留
- for /f "tokens=1,* delims==" %%i in ('set #')do for /f "delims=_" %%i in ("%%j")do set "保留%%i=%%j"
- :虚拟清空
- for /f "tokens=1,* delims==" %%i in ('set #')do set "%%i="
- :目录树结果
- for /f "tokens=1,* delims==" %%i in ('set 保留')do echo,%%j
- echo,任意键实体操作
- pause
- :实体操作
- for /f "delims=" %%i in ('dir/a-d/s/b ".\*.pdf"')do (
- set "error=y"&&for /f "tokens=1,* delims==" %%j in ('set 保留')do if /i "%%~fi"=="%%~fk" set "error="
- if defined error (
- echo, 移动: %%~fi
- )else (
- echo,不移动: %%~fi
- )
- )
- pause
- goto:eof
复制代码
作者: qin863132 时间: 2018-10-9 14:22
回复 2# xczxczxcz
直接比较最后一位比较准确,用后2位来进行比较的话容易误删。非常感谢您提供的代码,试了一下,可以实现要求,谢谢!
作者: tigerpower 时间: 2018-10-9 20:29
本帖最后由 tigerpower 于 2018-10-9 20:33 编辑
powershell one-liner- powershell "mkdir -f bake;ls|group {$_.basename.substring(0,$_.basename.length-1)}|%{($_.group|sort -des)[1..$_.count]}|%{mv $_ bake}"
复制代码
作者: qin863132 时间: 2018-10-10 11:00
回复 6# tigerpower
谢谢您,即便我不会用这个
作者: qin863132 时间: 2018-10-10 11:01
回复 4# /zhqsystem/zhq
非常感谢您的回复,小白一个,正在仔细研究
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |