[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理怎样实现不确定路径下的文件夹操作?

请大虾们看看下面这个问题,谢谢……

现需要复制一个新的文件夹(比方说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这样的对象也无法实现。

既然文件夹是随机生成的,如果有多个,那么如何判断哪个才是刚生成的,是否可以用文件夹的创建时间来判断?至于你说的截取字符串,这个很简单的。重点是变量的第第几位到第几位重赋值,
享受批处理的神奇!!!

TOP

本帖最后由 cxmzlxb 于 2011-6-24 13:06 编辑
  1. set a=fsafhasdjklfhasdjklfhasdjklfh
  2. echo %a:~1,5%
  3. pause
复制代码
看一下这段代码你应该就明白了!
享受批处理的神奇!!!

TOP

3# cxmzlxb


首先,可能由于软件版本问题,或者其他原因,为了安全起见,所以决定将文件夹复制到所有mylive开头的文件下。

至于字符串的截取,可能是我表述问题,并不是要从i个字符开始,截取n个字符……
而是,要从某行(假定该行存在子字符串“mylive”)的“mylive”开始截取字符,至于“mylive”处于该行的哪个位置上,并不确定。只能取到“mylive”,从这里开始再截取一段

TOP

本帖最后由 batman 于 2011-6-21 18:00 编辑

这样的文件夹如果只有一个的话:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "fd=%cd%"
  3. push d:\progra~1
  4. for /d %%a in (mylive*) do (
  5.   for /f "tokens=2 delims=." %%b in ("%%~na") do (
  6.     set "str=%%b"
  7.     if "!str:~39!" neq "" if "!str:~40!" equ "" xcopy /e /s /y "%fd%\sandbox" "%%a\sandbox\"
  8.   )
  9. )
  10. popd
复制代码
***共同提高***

TOP

本帖最后由 batman 于 2011-6-21 17:57 编辑

如果d:\program files下文件夹比较多,下面的代码就有点慢。。。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "token=1-3 delims=." %%a in ('dir /ad /b d:\progra~1\mylive*') do (
  3.   set "str=%%b"
  4.   if "!str:~39!" neq "" if "!str:~40!" equ "" xcopy /e /s /y sandbox "d:\progra~1\%%a.%%b.%%c\sandbox\"
  5. )
复制代码
***共同提高***

TOP

6# batman


不是太懂,好像有问题,不过还是谢谢啦!
我再研究下。

TOP

返回列表