中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-02 08:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教一个查找匹配字符串的问题?(引申了一下,帮帮忙!) 查看 1,309 回复 9
楼 主 请教一个查找匹配字符串的问题?(引申了一下,帮帮忙!) 发表于 2006-11-02 10:00 ·  中国 浙江 杭州 电信
初级用户
积分 25
发帖 9
注册 2006-10-31 05:17
19年会员
UID 68974
性别 男
来自 Hangzhou
状态 离线
新手一个:)
如何在如D:\program文件夹下查找一个与filename1名称匹配最近的文件,并将它copy到c:\
谢啦!

[ Last edited by Jevin on 2006-11-5 at 09:10 PM ]
2 发表于 2006-11-02 10:05 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

for /f %%a in ('dir /b/a-d/s D:\program\?filename1?.exe') do @copy "%%a" c:\

  大致可以满足需求了,不过不知道楼主要拷贝几个文件。代码没测试。
3 再次请教! 发表于 2006-11-02 10:20 ·  中国 浙江 杭州 电信
初级用户
积分 25
发帖 9
注册 2006-10-31 05:17
19年会员
UID 68974
性别 男
来自 Hangzhou
状态 离线
谢谢!
不好意思,小弟现在有点变化了:
先根据d:\programr下的一个文件名称(此文件夹下仅有一个文件),去查找F\backup下的文件是否存在,若不存在就查找与之文件名称匹配最近r的,并将它拷贝到d:\
4 发表于 2006-11-02 10:40 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
Originally posted by Jevin at 2006-11-2 10:20:
若不存在就查找与之文件名称匹配最近r的...

  在哪个文件夹下查找?backup下还是program下?
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
5 发表于 2006-11-02 10:48 ·  中国 浙江 杭州 电信
初级用户
积分 25
发帖 9
注册 2006-10-31 05:17
19年会员
UID 68974
性别 男
来自 Hangzhou
状态 离线
Originally posted by namejm at 2006-11-2 10:40 AM:

  在哪个文件夹下查找?backup下还是program下?




在backup下查找
谢谢!
6 发表于 2006-11-02 11:13 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  在2F的基础上扩充一下,暂未测试:

@echo off
:: 当文件名中含有多个点号的时候有可能无法准确找到近似的文件
for /f "delims=" %%i in ('dir /a-d /b d:\programr\test.txt') do set name=%%~ni&set postfix=%%~xi
if not exist "F\backup\%name%.%postfix%" (
for /f "delims=" %%i in ('dir /a-d /b F:\backup^|findstr /n ".*\%name%.*\.%postfix%$"') do copy "%%~dpnxi" d:\
)


[ Last edited by namejm on 2006-11-3 at 01:03 AM ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
7 发表于 2006-11-02 12:25 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Originally posted by namejm at 2006-11-2 11:13:
  在2F的基础上扩充一下,暂未测试:

@echo off
:: 当文件名中含有多个点号的时候有可能无法准确找到近似的文件
for /f "delims=" %%i in ('dir /a-d /b d:\programr') do set name=%%~ni&set postfix=%%~xi
if not exist "F\backup\%name%.%postfix%" (
for /f "delims=" %%i in ('dir /a-d /b F:\backup^|findstr /n ".*\%name%.*\.%postfix%$"') do copy "%%~dpnxi" d:\
)




@echo off
:: 当文件名中含有多个点号的时候有可能无法准确找到近似的文件
for /f "delims=" %%i in ('dir /a-d /b d:\programr\filename.exe') do set name=%%~ni&set postfix=%%~xi
if not exist "F\backup\%name%.%postfix%" (
for /f "delims=" %%i in ('dir /a-d /b F:\backup^|findstr /n ".*\%name%.*\.%postfix%$"') do copy "%%~dpnxi" d:\
)
8 发表于 2006-11-03 01:03 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  呵呵,不好意思,漏了文件名和扩展名,我修改一下4F的代码。多谢lxmxn提醒。

————————————————————————————————————————

  今天再看了一下3F的描述,发现似乎不存在漏掉文件名和扩展名的问题,或者说,无须指定文件名和扩展名,因为3F是这样说的:先根据d:\programr下的一个文件名称(此文件夹下仅有一个文件)——此文件夹指的究竟是d:\programr下的文件夹还是指 programr 这个文件夹本身?按照我的理解,我觉得应该是指 programr 文件夹本身,而它下面仅有一个文件,这个时候,不指定文件名和扩展名更具有通用性。

[ Last edited by namejm on 2006-11-4 at 01:09 AM ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2006-11-04 23:20 ·  中国 浙江 杭州 电信
初级用户
积分 25
发帖 9
注册 2006-10-31 05:17
19年会员
UID 68974
性别 男
来自 Hangzhou
状态 离线
呵呵,namejm理解很对,小弟没有表述清楚,见谅!
再次表述一下:先根据d:\program下的一个文件名称(program文件夹下仅有一个filename.exe执行文件),去查找服务器端(210.15.15.1)共享文件夹backup下的这个文件是否存在,若存在就直接运行d:\program下的这个exe文件,若不存在就查找与该文件名称匹配最近的那个文件,并将它拷贝到d:\program文件夹下面,同时删除旧的执行文件,运行这个新的执行文件.

文件名中都只含有一个点号的,访问服务器端user:administrator Password:111111
再次谢谢各位大侠们!;)
10 发表于 2006-11-05 07:14 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  呵呵,看来 namejm 兄还蛮仔细的,3F的这点小"漏洞"都看出来了~~不过为了正确性,最好还是加上扩展名为好~~
论坛跳转: