标题: [文件操作] 对当前目录下所有目录进行判断后切换到目标目录 [打印本页]
作者: Nano 时间: 2010-1-13 16:41 标题: 对当前目录下所有目录进行判断后切换到目标目录
对当前目录下所有目录进行判断,判断这些路径中是否存在updat目录,存在就cd进入到update上层目录,如c:\1\2\update,那么就cd到c:\1\2,同时另外还有一种特殊情况就是含有多个update目录如c:\1\2\update\update,这种情况还是以第一个为准,即还是进入到cd到c:\1\2。
如何用l批处理实现这个功能呢?最好通用的,因为目录深度和目录名会更具需要而发生变化,还望各位前辈多多指教,非常感谢。- @echo off
- cd /d "C:\Documents and Settings\Administrator\桌面\soft\patch\1"
- for %%a in (clnt svr update) do if exist %%a\ exit /b
-
- for /f "delims=" %%a in ('dir /ad/b/s clnt svr update 2^>nul') do (
- for %%? in (clnt svr update) do (
- if exist "%%~dpa\%%?\" xcopy "%%~dpa\%%?" %%?\ /ehqy > nul
- )
- exit /b
- )
复制代码
以上是我在cn-dos搜索的老贴
我和楼主的目的都是要CD到Update的父目錄可是這裡怎麼是cd /d "C:\Documents and Settings\Administrator\桌面\soft\patch\1"
然後也沒看到再那進入Update的父目錄。。在我的電腦上已改Update为ChromePlusUserData运行一闪就没(WIN7)不懂了..
我现在想实现搜索ChromePlus下的ChromePlusUserData文件夹然后删除一部分不用的文件
求教。。
作者: vsbat 时间: 2010-1-13 16:55
- @echo off
- setlocal enabledelayedexpansion
- for %%j in (C: D: E:) do (
- for /f "delims=" %%i in ('dir /s /ad /b %%j\update 2^>nul') do set "t=%%i"&set "t=!t:\uuuuu=!
- cd "!t!"
- )
- endlocal
- pause
复制代码
作者: zqz0012005 时间: 2010-1-13 19:00
- @echo off
- set folder="C:\Documents and Settings\Administrator\桌面\soft\patch\1"
- for /d /r "%folder:"=%" %%a in (update) do if not defined flag (if exist "%%a\" cd /d "%%~dpa"&&set flag=1)
- pause
复制代码
作者: Nano 时间: 2010-1-13 21:43
原帖由 zqz0012005 于 2010-1-13 19:00 发表
@echo off
set folder="C:\Documents and Settings\Administrator\桌面\soft\patch\1"
for /d /r "%folder:"=%" %%a in (update) do if not defined flag (if exist "%%a\" cd /d "%%~dpa"&&set flag=1)
pause
請問set folder="C:\Documents and Settings\Administrator\桌面\soft\patch\1"這一句有什麼用我桌面沒有這個路徑呀再說我也沒有使用Administrator帳戶
求高人解釋下謝謝
作者: Nano 时间: 2010-1-13 21:53
原帖由 vsbat 于 2010-1-13 16:55 发表
@echo off
setlocal enabledelayedexpansion
for %%j in (C: D: E do (
for /f "delims=" %%i in ('dir /s /ad /b %%j\update 2^>nul') do set "t=%%i"&set "t=!t:\uuuuu=!
cd "!t!"
)
endlocal
pause
這個太慢了全盤搜索。。如果遇到1\update\update就不是返回1\update\而是1\update\update我要的是1\update\能從%ProgramFiles% %USERPROFILE%這2個位置先搜索嗎
[ 本帖最后由 Nano 于 2010-1-13 22:13 编辑 ]
作者: zqz0012005 时间: 2010-1-14 10:23
那你说的“当前目录”是什么意思呢?你自己代码中给出了那样一个路径。
我和楼主的目的都是要CD到Update的父目錄可是這裡怎麼是cd /d "C:\Documents and Settings\Administrator\桌面\soft\patch\1"
然後也沒看到再那進入Update的父目錄。。在我的電腦上已改Update为ChromePlusUserData运行一闪就没(WIN7)不懂了..
我现在想实现搜索ChromePlus下的ChromePlusUserData文件夹然后删除一部分不用的文件
这是谁说的话呢?是你转载别人的还是你自己的要求?如果是你自己想要的,为什么这里是ChromePlusUserData而5楼又是update?
请把你自己的问题描述清楚!ORZ。。。
作者: Nano 时间: 2010-1-14 20:40
原帖由 zqz0012005 于 2010-1-14 10:23 发表
那你说的“当前目录”是什么意思呢?你自己代码中给出了那样一个路径。
这是谁说的话呢?是你转载别人的还是你自己的要求?如果是你自己想要的,为什么这里是ChromePlusUserData而5楼又是update?
请把你自己的 ...
顶楼已说明了代码是我从CN-DOS拷来的一段自已看不懂的。。想请人解释下。。原贴是搜UPDATE我是要搜ChromePlusUserData可是我在代码中替换不起做用。。
作者: zqz0012005 时间: 2010-1-15 17:36
本以为我认识繁体字,没想到楼主把它们组合在一起我就看不懂了。。。
我和楼主的目的都是要CD到Update的父目錄
我现在想实现搜索ChromePlus下的ChromePlusUserData文件夹然后删除一部分不用的文件
如果遇到1\update\update就不是返回1\update\而是1\update\update我要的是1\update\能從%ProgramFiles% %USERPROFILE%這2個位置先搜索嗎(繁体文仍然不加标点吗?)
原贴是搜UPDATE我是要搜ChromePlusUserData可是我在代码中替换不起做用。。
你到底想搜索什么呢?
作者: Nano 时间: 2010-1-15 17:55
- @echo off
- for %%D in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (set "Folder=%%D:\CloudCache")
- rem for /d /r "%Folder:"=%" %%a in (JumpListIcons) do (
- if not defined flag (if exist "%%a\" cd /d "%%~dpa"&&set flag=CloudCache))
- echo%Folder%
- echo %cd%
- pause
复制代码
我想全盘收索。怎么就不成功呢?斑斑再帮我改一下。
作者: Batcher 时间: 2010-1-15 22:45 标题: 回复 9楼 的帖子
把@echo off删除,看看你的代码做了些什么事情吧。
作者: Nano 时间: 2010-1-16 09:41
原帖由 Batcher 于 2010-1-15 22:45 发表
把@echo off删除,看看你的代码做了些什么事情吧。
删除后屏显
--------------------------------------------------
这是回显不是代码:
D:\Users\i - Copy>for %D in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do
(set "Folder=%D:\CloudCache" )
D:\Users\i - Copy>for / %a in (JumpListIcons) do (if not defined flag (if exist
"%a\" cd /d "%~dpa" && set flag=CloudCache ) )
D:\Users\i - Copy>(if not defined flag (if exist "Z:\CloudCache\JumpListIcons\"
cd /d "Z:\CloudCache\" && set flag=CloudCache ) )
D:\Users\i - Copy>echoZ:\CloudCache
The filename, directory name, or volume label syntax is incorrect.
Press any key to continue . . .
错误应该是命令直接找到了最后的盘符。。Z:而忽略了盘符C:~Y:而我的有含有JumpListIcons的CloudCache在D:盘和E:盘(D:\CloudCache\FFDCB536FC2C136CEC2E13F8A4F041DBD33E5F3B\1(这部分是随机命名的所以要搜索不能指定)\##PROGRAM_FILES##\ChromePlus\ChromePlusUserData\Default\JumpListIcons)我想按顺序查找先切到D:\**\JumpListIcons\..\执行命令。然后再切到E:\**\JumpListIcons\..\执行命令;如果增加了G:\**\JumpListIcons\..\就再切到*:\**\JumpListIcons\..\执行命令执行命令(PS:一定要切到目标文件夹)或者将JumpListIcons\..\设成变量调用。
[ 本帖最后由 Nano 于 2010-1-16 09:46 编辑 ]
作者: Batcher 时间: 2010-1-16 11:16 标题: 回复 11楼 的帖子
还没有想明白吗?要不先把rem注释的行也删掉,再运行一遍?
作者: Nano 时间: 2010-1-16 20:16
for %%D in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist "%%D:\%Folder%" set "Target=%%D:\%Folder%")
cd %Target%
这里总是最后的盘下目录。。我是要一个个运行。。
怎么才能先到C:\%Target%盘的目录运行命令后再到其它盘*:\%Target%的目录运行命令呀最好是询问下要不要搜索下个盘
直接写出来吧。。我要疯了。。
[ 本帖最后由 Nano 于 2010-1-16 20:20 编辑 ]
作者: 随风 时间: 2010-1-16 21:40
这个问题还挺考人的
我觉得楼主在顶楼描述的很清楚啊
对当前目录下所有目录进行判断,判断这些路径中是否存在updat目录,存在就cd进入到update上层目录,如c:\1\2\update,那么就cd到c:\1\2,同时另外还有一种特殊情况就是含有多个update目录如c:\1\2\update\update,这种情况还是以第一个为准,即还是进入到cd到c:\1\2。
作者: Batcher 时间: 2010-1-17 00:55 标题: 回复 13楼 的帖子
不管是哪种语言或者脚本,你重复100次甚至10000次对某个变量赋值,那么你认为最后这个变量的值会是什么呢?
作者: Nano 时间: 2010-1-17 08:58
&ptid原帖由 Batcher 于 2010-1-17 00:55 发表
不管是哪种语言或者脚本,你重复100次甚至10000次对某个变量赋值,那么你认为最后这个变量的值会是什么呢?
那要怎麼弄呀。。我不會
作者: Batcher 时间: 2010-1-17 15:13
CN-DOS不是有人给你写代码了吗,要不你先观摩一下别人是怎样使用for循环的?
作者: a590687 时间: 2010-1-19 15:12
- rem 把下面的d:\改成你要搜索的路径就可以了
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir/ad/s/b d:\^|findstr /e /i "update"') do (
- set "str=%%i"
- set "a=!str:update=update?!"
- for /f "delims=?" %%j in ("!a!") do (
- set "b=%%j"
- if not defined !b! (
- set !b!=000
- set "c=!b:~,-6!"
- echo !c! )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |