[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 盛世繁华 于 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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
复制代码

试试你实际使用可行不
1

评分人数

bat小白,请多指教!谢谢!

TOP

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

回复 2# 77七

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

TOP

返回列表