|
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
|

批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
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语句里面了?
Quote: | 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 来自 在地狱中仰望天堂
状态 离线
|
|
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 ]
|

批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-6-2 21:24 |
|
|
fly2love
新手上路

积分 10
发帖 10
注册 2010-6-1
状态 离线
|
『第
7 楼』:
谢谢,已经测试可以了
还是基础不扎实,谢谢!可以结贴了!
Quote: | 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 楼』:
Quote: | if exist "a.txt" echo 成功 else echo 失败
这样一条语句中,
如果 存在a.txt 的话的话,运行的结果是:
“成功 else echo 失败”
就是把第一个echo 后面的都显示出来了,应该怎么修改下了?
|
|
语法错误,应该写成:
if exist "a.txt" (echo 成功) else echo 失败
|

批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
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.不存在
)
|

批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-6-3 00:37 |
|