Board logo

标题: [文件操作] [已解决]求助批处理如何复制文件名含某个特定字符的文件到该文件所在的文件夹? [打印本页]

作者: 盛世繁华    时间: 2023-2-16 11:28     标题: [已解决]求助批处理如何复制文件名含某个特定字符的文件到该文件所在的文件夹?

本帖最后由 盛世繁华 于 2023-2-16 15:45 编辑

请各位老师指导下,如何复制文件名(不考虑扩展名)中含有特定字符的文件到该文件所在的文件夹内,也就是这个文件原来在哪还复制到哪,并且把复制得到的新文件的命名用另外一个指定的字符代替而其他字符包括后缀都不变。我弄一半弄不下去了,代码放下面了。为了方便说明,下面以复制图片举例:

现在文件夹下有:
一个bat文件,一个食谱1文件夹(包含2张图片:A1001,B1002),一个食谱2文件夹(包含2张图片:A1003,B1004)
那么运行bat,①设置复制的份数,这里设置为2份,②设置新文件用什么字符替换老文件名里的特定字符,新文件字符如果不止一个用逗号隔开。假设我们用E,F 替换含B的文件,运行时依次填入:set /p "Copys=输入份数>"   set /p "Oldcharacter=输入旧字符>"  set /p "Newcharacter=输入新字符>"
那么依次输入2,输入B,输入E,F,运行结束后文件夹下的文件变为:
一个bat文件,一个食谱1文件夹(包含2张图片:A1001,B1002,E1002,F1002),一个食谱2文件夹(包含2张图片:A1003,B1004,E1004,F1004)

也就是:
  ———————————                            ————————————
  |  1.bat                      |                           |  1.bat                        |
  |  食谱文件夹1             |                           |  食谱文件夹1                |
  |       A1001.jpg         |                           |       A1001.jpg            |
  |       B1002.jpg         |                           |       B1002.jpg            |
  |                                |                           |       E1002.jpg            |  
  |                                |            变为         |       F1002.jpg            |
  |  食谱文件夹2             |                           |  食谱文件夹2                |
  |       A1003.jpg         |                           |       A1003.jpg            |
  |       B1004.jpg         |                           |       B1004.jpg            |
  |                                |                           |       E1004.jpg            |
  |                                |                           |       F1004.jpg            |
  ———————————                            ————————————

我的代码会复制所有文件夹里含B的图片然后到所有的文件夹,而且替换字符还没写。最后说明的是,想让它能批处理所有文件而不仅限于图片,谢谢老师:
  1. @echo off&cd /d "%~dp0"
  2. set "root=%~dp0"
  3. for /d %%i in (*) do (
  4.     for %%a in ("B") do (
  5.         for /f "delims=" %%b in ('dir /a-d-h/b/s "*%%~a*" ^|findstr /vi "\.bat$"') do (
  6.         copy "%%~b" "%%i\"
  7.         )
  8.     )
  9. )
  10. echo 完成!
  11. pause
复制代码

作者: 77七    时间: 2023-2-16 13:07

  1. @echo off
  2. set /p copys=输入份数:
  3. set /p OldCharacter=输入旧字符:
  4. set /p NewCharacter=输入新字符:
  5. for /f "delims=" %%i in ('dir /b /s /a-d *%OldCharacter%*.* ^| findstr /vi "\.bat$"') do (
  6.         set "OldName=%%~ni"
  7.         set "folder=%%~dpi"
  8.         setlocal enabledelayedexpansion
  9.         set n=1
  10.         for %%a in (%NewCharacter%) do (
  11.                 if "!n!" leq "%copys%" (
  12.                         set /a n+=1
  13.                         set "NewName=!OldName:%OldCharacter%=%%a!"
  14.                         echo copy "!folder!!OldName!%%~xi" "!folder!!NewName!%%~xi"
  15.                         copy "!folder!!OldName!%%~xi" "!folder!!NewName!%%~xi"
  16.                 )
  17.         )
  18.         endlocal
  19. )
  20. pause
复制代码

试试你实际使用可行不
作者: 盛世繁华    时间: 2023-2-16 14:26

本帖最后由 盛世繁华 于 2023-2-16 14:42 编辑

回复 2# 77七

可以了,十分感谢哈,第一次我测试错了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2