中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » for循环中如何变量连接与如何使用通配符的问题
作者:
标题: for循环中如何变量连接与如何使用通配符的问题 上一主题 | 下一主题
fly2love
新手上路





积分 10
发帖 10
注册 2010-6-1
状态 离线
『楼 主』:  for循环中如何变量连接与如何使用通配符的问题

问题描述: 1、有一个列表文件,名字叫做list.txt 文件列表里面的内容全部都是文件夹的名字,如 file1 file2 file3 2、同时,在E:\image有一批文件,名字分别为: file1_test1.bmp file2_test2.bmp file3_test3.bmp ..... 也就是说这些文件的名字是文件夹的名字加上一部分其他的内容组成的。 我的任务是把每个文件移动到对应的文件夹里面去。 如: E:\image\file1_test1.bmp 移动到 F:\test\file1 E:\image\file2_test2.bmp 移动到 F:\test\file2 我的实现步骤如下: 1、for 循环得到 list.txt 里面的文件夹的名字 %%i 2、利用通配符*实现文件的移动,如 move "E:\image\%%i*.bmp" "F:\test\%%i" 但是这个move语句行不通 与.bmp不能够连接,后面的通配符无法识别 请教高手这句应该怎么写了?


2010-6-2 21:03
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

1,可以使用findstr构建表达规则 2,可以使用对字符串的截取、替换、分隔等后,然后用if进行判断构建规则。示例:
@echo off
for /f "usebackq delims=" %%a in ("f:\1 2\list.txt") do set "#%%a=="
for %%a in (*.bmp) do for /f "tokens=1* delims=_" %%b in ("%%a") do (
setlocal enabledelayedexpansion
set c=%%c
if defined #%%b if /i "!c:~0,4!"=="test" echo.文件%%a符合规则:_前为list中存在._后为test加任意字符
Endlocal)
pause




2010-6-2 21:06
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fly2love
新手上路





积分 10
发帖 10
注册 2010-6-1
状态 离线
『第 3 楼』:  

谢谢您的回复啦, 不过您好像误会我的意思了,你给的代码是实现判断是否有与文件夹名字相同部分的文件的存在 我的要求其实是在 move "E:\image\%%i*.bmp" "F:\test\%%i" 这一个move 语句的连接问题了? 路径:E:\image、 文件名:\%%i*. (这里有个通配符) 后缀名:.bmp 这3个怎么连接起来放在move语句里面了?
Originally posted by Hanyeguxing at 2010-6-2 21:06: 1,可以使用findstr构建表达规则 2,可以使用对字符串的截取、替换、分隔等后,然后用if进行判断构建规则。示例:[code] @echo off for /f "usebackq de ...


2010-6-2 21:10
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 4 楼』:  

把你写的代码贴出来。




2010-6-2 21:16
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fly2love
新手上路





积分 10
发帖 10
注册 2010-6-1
状态 离线
『第 5 楼』:  

@echo off
for /f "usebackq delims=" %%i in (test.txt) do move "E:\image\%%i*.bmp" "F:\test\%%i"
pause
谢谢高手


2010-6-2 21:21
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 6 楼』:  

如果目录必然存在,则可以不用if not exist "F:\test\%%i\" md "F:\test\%%i"
@echo off
for /f "delims=" %%i in (test.txt) do (
if not exist "F:\test\%%i\" md "F:\test\%%i"
move "E:\image\%%i*.bmp" "F:\test\%%i")
pause
@echo off
for /f "usebackq delims=" %%i in ("test.txt") do (
if not exist "F:\test\%%i\" md "F:\test\%%i"
move "E:\image\%%i*.bmp" "F:\test\%%i")
pause
[ Last edited by Hanyeguxing on 2010-6-2 at 21:34 ]




2010-6-2 21:24
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fly2love
新手上路





积分 10
发帖 10
注册 2010-6-1
状态 离线
『第 7 楼』:  

谢谢,已经测试可以了 还是基础不扎实,谢谢!可以结贴了!
Originally posted by Hanyeguxing at 2010-6-2 21:24: [code]@echo off for /f "delims=" %%i in (test.txt) do ( if not "F:\test\%%i\" md "F:\test\%%i" move "E:\image\%%i*.bmp" "F:\test\%%i") pause[/c ...


2010-6-2 21:34
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 8 楼』:  

if exist "a.txt" echo 成功 else echo 失败 这样一条语句中, 如果 存在a.txt 的话的话,运行的结果是: “成功 else echo 失败” 就是把第一个echo 后面的都显示出来了,应该怎么修改下了?
语法错误,应该写成:
if exist "a.txt" (echo 成功) else echo 失败




2010-6-3 00:03
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 9 楼』:  

else的几种格式化:
if exist a.txt (echo.存在) else echo.不存在
if exist a.txt (
echo.存在
) else echo.不存在
if exist a.txt (echo.存在) else (echo.不存在)
if exist a.txt (echo.存在) else (
echo.不存在
)
if exist a.txt (
echo.存在
) else (
echo.不存在
)




2010-6-3 00:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: