Board logo

标题: [文本处理] 批处理 根据文件夹名称去 copy文件 怎么做 [打印本页]

作者: ayddlantuzi    时间: 2017-2-7 14:58     标题: 批处理 根据文件夹名称去 copy文件 怎么做

文件夹名称是 2个数字开头或3个数字开头    22abcd   也可能是    133abcd
要从上一层目录 复制文件名称abcd.dll  的文件 到这个文件夹,如果没有这个文件就提示    abcd.dll不存在

下面代码写了一半,就获取当前文件名称22abcd  后面的网上搜了下,不会写了
如何把文件夹前面的数字去掉,数字可能是2位也可能是3位,再从上层目录 复制abcd.dll到这个文件夹   .dll文件不存在就提示
  1. @echo off
  2. set "p=%~dp0"
  3. for /f "delims=" %%i in ("%p:~0,-1%") do (set var=%%~ni)
  4. echo %var%
  5. pause
复制代码

作者: hlzj88    时间: 2017-2-7 19:59

把问题梳理一下,,在当前文件夹里有n个dll文件和n个含前数字后字母名称的文件夹,想把和文件夹名称里字母相同的dll文件拷贝到对应文件夹。没有对应的就提示。    是这样理解的吧

问  文件夹名的数字是2位或3位,那么字母呢,都是4个字母吗
作者: ayddlantuzi    时间: 2017-2-8 09:20

回复 2# hlzj88


文件夹名称 数字2-3位开头  后面字符串长度不定,但不会太长,50位以内吧
每个文件夹里都有一个批处理单独执行的,不是一个批处理 拷贝所有的dll到所的对应有文件夹
后来换了个思维,就用两个批处理,2位开头的 直接去掉开头2位,3位数字开头的去掉开头3位

2位数字开头的
  1. @echo off
  2. set "p=%~dp0"
  3. for /f "delims=" %%i in ("%p:~0,-1%") do (set var=%%~ni)
  4. echo %var:~2,100%
  5. copy ..\0GameServer\%var:~2,100%.dll .\
  6. pause
复制代码
3位数字开头的
  1. @echo off
  2. set "p=%~dp0"
  3. for /f "delims=" %%i in ("%p:~0,-1%") do (set var=%%~ni)
  4. echo %var:~3,100%
  5. copy ..\0GameServer\%var:~3,100%.dll .\
  6. pause
复制代码
当时就是不知道 正则表达式 如何做,就判断开头2-3位是数字的话就忽略,只取后面的文件名字符串(后面字符串的也可能包含数字)
文件不存在的时候,执行批处理的时候会提示了
兄弟知道怎么用正则表达式去把这两个做成一个通用的话 指导下~~谢谢
作者: hlzj88    时间: 2017-2-9 22:58

做成一个,可以先截取前3位,用数学运算来判断,set /a p=1000- ,运算成功就goto到3位数字的代码,不成功就可以确认是2个数字,用跳转到2位数字的。
  1. copy tongming.txt 1\>nul ||echo tongming.txt不存在
  2. pause
复制代码

作者: taofan712    时间: 2017-2-10 11:23

  1. @echo off
  2. :loop
  3. cls
  4. set folder=
  5. set /p folder=拖入要处理的文件夹
  6. set "folder=%folder:"=%"
  7. cd /d "%folder%"
  8. cd ..
  9. for /f "delims=" %%a in ("%folder%") do (
  10. set folderpath=%%~dpa
  11. set foldername=%%~na
  12. )
  13. set /a 1%foldername:~0,3%1 2>nul && goto threenum
  14. set /a 1%foldername:~0,2%1 2>nul && goto twonum
  15. echo;无需更改 &pause>nul & goto loop
  16. :threenum
  17. if exist %foldername:~3%.dll (
  18. copy /y %foldername:~3%.dll "%folder%\"  
  19. echo;处理完毕 & pause>nul & goto loop
  20. ) else (
  21. echo;%foldername:~3%.dll不存在 & pause>nul & goto loop
  22. )
  23. :twonum
  24. set /a 1%foldername:~0,2%1 2>nul && if exist %foldername:~2%.dll (
  25. copy /y %foldername:~2%.dll "%folder%\"
  26. echo;处理完毕 & pause>nul & goto loop
  27. ) else (
  28. echo;%foldername:~2%.dll不存在 & pause>nul & goto loop &goto end
  29. )
复制代码
当做作业练习,请好心人指点怎么写会更好。
作者: 回家路上    时间: 2017-2-10 15:14

  1. @echo off & setlocal enabledelayedexpansion
  2. set name=123abc
  3. set /a num=name-0
  4. echo;!name:%num%=!
  5. pause & exit /b
复制代码

作者: taofan712    时间: 2017-2-10 16:26

回复 6# 回家路上


    这不可能!你是怎么做到的?
   set name=123abc
   set /a num=name-0
怎么会得到“123”呢 ?什么原理啊,第二行的name不用%括起来是什么道理?请求指点。
作者: ayddlantuzi    时间: 2017-2-13 10:43

回复 6# 回家路上


    叼~~~~
作者: Batcher    时间: 2017-2-13 13:40

回复 7# taofan712


set /a 等号右侧的变量可以省略百分号,参考set教程第5页:
http://bbs.bathome.net/thread-31727-1-1.html




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