标题: 批处理怎样实现不确定路径下的文件夹操作? [打印本页]
作者: sysuhxc 时间: 2011-6-21 16:00 标题: 批处理怎样实现不确定路径下的文件夹操作?
请大虾们看看下面这个问题,谢谢……
现需要复制一个新的文件夹(比方说sandbox)及其内容到“D:\Program Files\mylive.AA48D85AE191022E6ECAC1E633A547696D4829BC.1”路径下。
其中,“mylive.AA48D85AE191022E6ECAC1E633A547696D4829BC.1”文件夹的名称在某软件安装时随机生成,可以确定的是该文件夹以“mylive.”开头,字符数确定,其后序列是随机生成的。
原本打算通过"D:\Program Files\mylive*”定位到该路径,但如果“D:\Program Files”下有多个以“mylive”开头的文件夹时,就无法进行定位。
目前的思路是,将新的文件夹(sandbox)复制到“D:\Program Files”下所有以“mylive”开头的文件夹中。
“D:\Program Files”下所有以“mylive”开头的文件夹可以通过dir >mylive.c,存入文件。然后读取mylive.c文件,从中截取以mylive开头的字符串,并存入array或者list,从而得到多个路径。
但问题是,本人小白,虽经多番努力,至今未能找到批处理中有类似其他语言的,可以截取以“mylive”开头、长为n的子字符串的函数。另外,像array或者是list这样的对象也无法实现。
作者: cxmzlxb 时间: 2011-6-21 16:56
既然文件夹是随机生成的,如果有多个,那么如何判断哪个才是刚生成的,是否可以用文件夹的创建时间来判断?至于你说的截取字符串,这个很简单的。重点是变量的第第几位到第几位重赋值,
作者: cxmzlxb 时间: 2011-6-21 17:12
本帖最后由 cxmzlxb 于 2011-6-24 13:06 编辑
- set a=fsafhasdjklfhasdjklfhasdjklfh
- echo %a:~1,5%
- pause
复制代码
看一下这段代码你应该就明白了!
作者: sysuhxc 时间: 2011-6-21 17:23
3# cxmzlxb
首先,可能由于软件版本问题,或者其他原因,为了安全起见,所以决定将文件夹复制到所有mylive开头的文件下。
至于字符串的截取,可能是我表述问题,并不是要从i个字符开始,截取n个字符……
而是,要从某行(假定该行存在子字符串“mylive”)的“mylive”开始截取字符,至于“mylive”处于该行的哪个位置上,并不确定。只能取到“mylive”,从这里开始再截取一段
作者: batman 时间: 2011-6-21 17:34
本帖最后由 batman 于 2011-6-21 18:00 编辑
这样的文件夹如果只有一个的话:- @echo off&setlocal enabledelayedexpansion
- set "fd=%cd%"
- push d:\progra~1
- for /d %%a in (mylive*) do (
- for /f "tokens=2 delims=." %%b in ("%%~na") do (
- set "str=%%b"
- if "!str:~39!" neq "" if "!str:~40!" equ "" xcopy /e /s /y "%fd%\sandbox" "%%a\sandbox\"
- )
- )
- popd
复制代码
作者: batman 时间: 2011-6-21 17:52
本帖最后由 batman 于 2011-6-21 17:57 编辑
如果d:\program files下文件夹比较多,下面的代码就有点慢。。。- @echo off&setlocal enabledelayedexpansion
- for /f "token=1-3 delims=." %%a in ('dir /ad /b d:\progra~1\mylive*') do (
- set "str=%%b"
- if "!str:~39!" neq "" if "!str:~40!" equ "" xcopy /e /s /y sandbox "d:\progra~1\%%a.%%b.%%c\sandbox\"
- )
复制代码
作者: sysuhxc 时间: 2011-6-21 21:35
6# batman
不是太懂,好像有问题,不过还是谢谢啦!
我再研究下。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |