中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-23 12:11
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » for如何提取文件的指定路径 查看 893 回复 9
楼 主 for如何提取文件的指定路径 发表于 2007-07-03 09:25 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
问题是这样的,
有一个目录 C:\YSF
还有一个目录 D:\YSFCOM
在C:\YSF这个目录下可能有若干个目录,每个目录下还有若干个文件,现在我要对每个文件按照原来的目录结构复制到D:\YSFCOM下,用xcopy可以做到,但是我现在要对每个文件处理然后再copy过去,所以只能一个个拷贝,我想在for中把取到的每个%~fi 做处理,去掉C:\YSF 加上D:\YSFCOM,但是%~fi 是不是不能截取字段呢? 用:~0,6 好像没反应,我也 用 set temp = "%%~fi" ,然后处理temp,但是echo %temp% > 1.log 为什么什么都看不到,别说在做别的处理了?
想问问大家,
1怎么截取字段关于%~fi 此类的
2还有为什么我不能 echo 出 temp 的值呢,echo "%%~fi" 是可以的
3我想实现的功能怎么实现呢?
有点急,批处理我又不懂,查了很久还是没有解决,麻烦大家看看,先谢了。

[ Last edited by bjsh on 2007-7-31 at 10:08 AM ]
2 发表于 2007-07-03 13:03 ·  中国 广东 佛山 电信
高级用户
★★
我思故我在
积分 512
发帖 228
注册 2007-01-21 10:31
19年会员
UID 77225
性别 男
状态 离线
1 FOR/? 查看帮助

给个例子:for %%i in (test.txt) do echo %%~fi

test.txt在搜索路径或当前目录,另外,%~fi只是将 %i 扩充到一个完全合格的路径

名,截取字符的方法你可以搜索论坛

2 echo %temp% > 1.log完全可以,你可以在批处理的当前目录下找到1.log,至于

你为什么看不到,我看最好将你的代码完全贴出来,要不然别人也帮不了你找到原因

3 或许是我不了解你的意思,但我不知道你要对什么格式的文件进行什么样的处理,

我想你完全不必要这么麻烦,还要去掉C:\YSF 加上D:\YSFCOM ^_^!

比如 for /f %%i in ('dir /a /b /s C:\YSF') do "加上你要处理的事件" ,最后再COPY
我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
3 发表于 2007-07-03 13:42 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
有一个目录 C:\YSF,下面的目录名字和数量是不知道,子目录下还有若干zip文件。
还有一个目录 D:\YSFCOM,是空的。
我想实现的功能是‘
比如说存在C:\YSFC\temp\A0001.zip文件,我要处理是要把这个文件拷贝到D:\YSFC\temp\B0001.zip。还是在temp目录下,但是名字要改成B0001.zip,而且还要把原来的的C:\YSFC\temp\A0001.zip的文件变成A0001.bak ,然后再删掉C:\YSFC\temp\A0001.zip这个文件。直接用xcopy是不可以做到的。
所以我想在for中处理%~fi ,这样路径我就可以自己随便更改,满足自己的要求。
但是%~fi 可以截取字符马? 我弄不出来。
4 发表于 2007-07-03 15:35 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
没有人知道怎么做办吗?
:(
5 发表于 2007-07-03 18:15 ·  中国 广东 佛山 电信
高级用户
★★
我思故我在
积分 512
发帖 228
注册 2007-01-21 10:31
19年会员
UID 77225
性别 男
状态 离线
"把原来的的C:\YSFC\temp\A0001.zip的文件变成A0001.bak ,然后再删掉C:\YSFC\temp\A0001.zip这个文件"??

直接删除不行么,非要改个名字再删除?
我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
6 发表于 2007-07-04 08:40 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
有人知道怎么做吗?
7 发表于 2007-07-04 08:42 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
怎么把目录下的所有文件(也包括子目录下的,子目录和文件数目未知),文件名第一个字母改成B?
麻烦大家了
8 发表于 2007-07-04 12:55 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
没有人这么用过吗?
9 发表于 2007-07-04 13:10 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线

有一个目录 C:\YSF,下面的目录名字和数量是不知道,子目录下还有若干zip文件。
还有一个目录 D:\YSFCOM,是空的。
我想实现的功能是‘
比如说存在C:\YSFC\temp\A0001.zip文件,我要处理是要把这个文件拷贝到D:\YSFC\temp\B0001.zip。还是在temp目录下,但是名字要改成B0001.zip,而且还要把原来的的C:\YSFC\temp\A0001.zip的文件变成A0001.bak ,然后再删掉C:\YSFC\temp\A0001.zip这个文件。直接用xcopy是不可以做到的。
所以我想在for中处理%~fi ,这样路径我就可以自己随便更改,满足自己的要求。
但是%~fi 可以截取字符马? 我弄不出来。


xcopy /T /E C:\YSF d:\YSF\
创建目录结构; 为了方便后面的处理 目录暂且叫 YSF;
处理完后 再更名为:YSFCOM

利用for
copy c:%%~pnxi d:%%~pnxi
即可;

至于A0001.zip改为 B0001.zip等问题;

可以再复制完后;统一用 ren A*.*(或具体的后缀) B*.*(或具体的后缀) 改名
即可

至于

而且还要把原来的的C:\YSFC\temp\A0001.zip的文件变成A0001.bak ,然后再删掉C:\YSFC\temp\A0001.zip这个文件

直接 ren c:%%~pnxi %%~ni.bak 即可; 重命名了 .zip的自然变成了 .bak的了;无所谓删除了

[ Last edited by bjsh on 2007-7-4 at 01:15 PM ]
10 发表于 2007-07-04 15:50 ·  日本
新手上路
积分 16
发帖 7
注册 2007-07-03 08:43
18年会员
UID 92999
性别 男
状态 离线
============================
至于A0001.zip改为 B0001.zip等问题;

可以再复制完后;统一用 ren A*.*(或具体的后缀) B*.*(或具体的后缀) 改名
============================

谢谢斑竹了,等的就是这个,总是想着怎么截取字符串,弄了半天,原来这样就可以做到,批处理果然很奥妙 :)
论坛跳转: