标题: [文件操作] 如何将文件名包含指定字符串的文档移动到另一个文档,判断修改文件名某一位 [打印本页]
作者: wxback 时间: 2018-1-16 11:09 标题: 如何将文件名包含指定字符串的文档移动到另一个文档,判断修改文件名某一位
本帖最后由 wxback 于 2018-1-16 11:25 编辑
一个文件夹AAA内有子文件夹aaa,bbb,ccc,其中有文档GMSMM90A29.doc,GMSMM90A30.doc,GMSMM90A31.doc等文件分散在不同的文件夹里
如何将AAA这个根文件夹内 文件名包含GMSMM90A,后续数字不同的文档移动到一个新建的文件名为GMSMM90A的文件夹内
换个说法,
遍历AAA文件夹包含子文件夹下所有名为GMSMM90A??.doc的文件(?=0~9),并新建一个名为GMSMM90A的文件夹,将所有文件名包含GMSMM90A,后续数字不同的文件移动到此文件夹内。
GMSMM90A这个字符串是个变量可以手动修改。
如果要把GMSMM90A29.doc,GMSMM90A30.doc,GMSMM90A31.doc 这样文档中的A改成B。如果是B改成C。C改成D
刚在论坛找到一个代码是判断第19个字符是否为Z,如否则添加Z。
要怎么改才能适用是A改B,是B改C呢?
如果能A-B,B-C,C-D这么进一位就最好了,一个一个的反着替换没那么方便。- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=*" %%i in ('dir /a-d/b/s "A\*.xls"') do (
- set "str=%%~nxi"
- if /i "!str:~19,1!" neq "z" (
- ren "%%i" "!str:~,19!Z!str:~19!"
- )
- )
- pause
复制代码
作者: yhcfsr 时间: 2018-1-16 11:29
本帖最后由 yhcfsr 于 2018-1-16 17:18 编辑
- @echo off &setlocal enableDelayedExpansion
- rem 设置源目录
- set "ScDir=D:\test"
- rem 设置文件清单
- set "FileList=d:\move.txt"
- rem 设置目的目录
- set "DtDir=D:\temp"
-
- set CP1=ABCDEFGHIJKLMNOPQRSTUVWXYZ
- set CP2=BCDEFGHIJKLMNOPQRSTUVWXYZZ
- for /l %%a in (0,1,25) do (
- set /a n=%%a
- call set [%%CP1:~!n!,1%%]=%%CP2:~!n!,1%%
- )
- cd /d "%ScDir%"
- for /f "delims=" %%a in ('type "%FileList%"') do (
- for /f "delims=" %%b in ('dir /a-d /s /b^|findstr "%%a"') do (
- rem 复制文件
- set "FileDir=%%~dpb"
- set "FileDir=!FileDir:~0,-1!"
- robocopy /s "!FileDir!" "%DtDir%\%%a" "%%~nxb"
- rem 重命名文件
- set "name=%%~nb"
- call set "ch=%%[!name:~9,1!]%%"
- set "name=!name:~0,9!!ch!!name:~10!"
- ren "%DtDir%\%%a\%%~nxb" "!name!%%~xb"
- )
- )
- pause&exit
复制代码
作者: wxback 时间: 2018-1-17 16:26
回复 2# yhcfsr
感谢耐心指导,运行了一下脚本发现一个情况,如果是子文件夹里的文件,是不会进位的。
之前发给我的那个分开运行的 移动文档的批处理 和 重命名的批处理 也是非常方便好用的。
作者: WHY 时间: 2018-1-18 02:04
PowerShell 代码- $srcDir = 'E:\Test'; #源目录
- $keyWord = 'GMSMM90'; #关键字
-
- $arr = dir ($srcDir + '\' + $keyWord + '[a-z][0-9][0-9].doc') -Recurse | ?{$_ -is [IO.FileInfo]}
- $arr | ForEach {
- $name = $_.Name;
- $chr = $name.SubString($keyWord.Length, 1).ToUpper();
- $int = [int][char]$chr;
- $int = $int + 1 - [int][Math]::Floor($int/90)*26;
- $name = $keyWord + [char]$int + $name.SubString($keyWord.Length + 1);
- ren -LiteralPath $_.FullName -NewName $name -Force -WhatIf;
- }
复制代码
作者: WHY 时间: 2018-1-18 08:11
- @echo off & setlocal enabledelayedexpansion
- rem 原目录
- set "srcDir=E:\test"
- rem 关键字
- set "key=GMSMM90"
-
- for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A) do (
- set "_!s!=%%i" & set "s=%%i"
- )
-
- for /f "delims=" %%i in ('dir /b /a-d /s "%srcDir%\%key%*.doc"^|findstr /i "\\%key%[a-z][0-9][0-9]\.doc$"') do (
- set "name=%%~nxi"
- set "s=!name:*%key%=!"
- for %%j in ("!s:~0,1!") do echo;ren "%%i" "%key%!_%%~j!!s:~1!"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |