标题: [文本处理] 批处理 根据文件夹名称去 copy文件 怎么做 [打印本页]
作者: ayddlantuzi 时间: 2017-2-7 14:58 标题: 批处理 根据文件夹名称去 copy文件 怎么做
文件夹名称是 2个数字开头或3个数字开头 22abcd 也可能是 133abcd
要从上一层目录 复制文件名称abcd.dll 的文件 到这个文件夹,如果没有这个文件就提示 abcd.dll不存在
下面代码写了一半,就获取当前文件名称22abcd 后面的网上搜了下,不会写了
如何把文件夹前面的数字去掉,数字可能是2位也可能是3位,再从上层目录 复制abcd.dll到这个文件夹 .dll文件不存在就提示- @echo off
- set "p=%~dp0"
- for /f "delims=" %%i in ("%p:~0,-1%") do (set var=%%~ni)
- echo %var%
- 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位数字开头的- @echo off
- set "p=%~dp0"
- for /f "delims=" %%i in ("%p:~0,-1%") do (set var=%%~ni)
- echo %var:~2,100%
- copy ..\0GameServer\%var:~2,100%.dll .\
- pause
复制代码
3位数字开头的- @echo off
- set "p=%~dp0"
- for /f "delims=" %%i in ("%p:~0,-1%") do (set var=%%~ni)
- echo %var:~3,100%
- copy ..\0GameServer\%var:~3,100%.dll .\
- pause
复制代码
当时就是不知道 正则表达式 如何做,就判断开头2-3位是数字的话就忽略,只取后面的文件名字符串(后面字符串的也可能包含数字)
文件不存在的时候,执行批处理的时候会提示了
兄弟知道怎么用正则表达式去把这两个做成一个通用的话 指导下~~谢谢
作者: hlzj88 时间: 2017-2-9 22:58
做成一个,可以先截取前3位,用数学运算来判断,set /a p=1000- ,运算成功就goto到3位数字的代码,不成功就可以确认是2个数字,用跳转到2位数字的。- copy tongming.txt 1\>nul ||echo tongming.txt不存在
- pause
复制代码
作者: taofan712 时间: 2017-2-10 11:23
- @echo off
- :loop
- cls
- set folder=
- set /p folder=拖入要处理的文件夹
- set "folder=%folder:"=%"
- cd /d "%folder%"
- cd ..
- for /f "delims=" %%a in ("%folder%") do (
- set folderpath=%%~dpa
- set foldername=%%~na
- )
- set /a 1%foldername:~0,3%1 2>nul && goto threenum
- set /a 1%foldername:~0,2%1 2>nul && goto twonum
- echo;无需更改 &pause>nul & goto loop
-
- :threenum
- if exist %foldername:~3%.dll (
- copy /y %foldername:~3%.dll "%folder%\"
- echo;处理完毕 & pause>nul & goto loop
- ) else (
- echo;%foldername:~3%.dll不存在 & pause>nul & goto loop
- )
- :twonum
- set /a 1%foldername:~0,2%1 2>nul && if exist %foldername:~2%.dll (
- copy /y %foldername:~2%.dll "%folder%\"
- echo;处理完毕 & pause>nul & goto loop
- ) else (
- echo;%foldername:~2%.dll不存在 & pause>nul & goto loop &goto end
- )
复制代码
当做作业练习,请好心人指点怎么写会更好。
作者: 回家路上 时间: 2017-2-10 15:14
- @echo off & setlocal enabledelayedexpansion
-
- set name=123abc
- set /a num=name-0
- echo;!name:%num%=!
-
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |