标题: 关于判断文件名的批处理!急!!!在线等!!!
[打印本页]
作者: crysis
时间: 2009-4-11 06:51
标题: 关于判断文件名的批处理!急!!!在线等!!!
1、我需要这样一个批处理:
读取指定目录里的文件名,然后判断如果有相应的文件名则goto到下一步,否则终止。
比如:
c:\下有 *****123.txt 文件,就需要判断是否存在一个文件名包含123的,如果有则继续,否则退出。
2、还有这样一个批处理:
在一个文本文档中包含路径,但需要变成运行批处理后,将这个路径设定为%systemroot%之类,如文本文档中有:
%123%\windows\system32\
就需要运行批处理后将这个文档中的%123%变成系统的系统根目录:c:\windows\system32\
希望大家帮忙,谢谢了!!!!
[
Last edited by crysis on 2009-4-11 at 06:57 ]
作者: yishanju
时间: 2009-4-11 07:02
dir /b c:\*.txt|findstr /ric:".*123\.txt"&&goto :ne
作者: crysis
时间: 2009-4-11 07:04
谢谢你了,麻烦你第二个。
作者: yishanju
时间: 2009-4-11 07:05
http://baiy.cn/utils/fr/index.htm
查换替换 推荐FR
FR -R:"%123%" -t:"c:\" 123.txt
作者: freeants001
时间: 2009-4-11 07:09
if not exist c:\*123.txt goto:eof
作者: netbenton
时间: 2009-4-11 07:10
@echo off&setlocal ENABLEDELAYEDEXPANSION
for /r d:\dd %%a in (*.*) do (set name=%%~na&if not "!name:123=!"=="!name! goto :continu)
goto :eof
:continu
...
第一个问题是不是这样,
第二个不明白。。。
作者: crysis
时间: 2009-4-11 07:18
if not exist c:\*123*.txt goto:eof
这样的话就可以判断文件中部的文字了,谢谢!
作者: crysis
时间: 2009-4-11 07:18
Quote: |
Originally posted by netbenton at 2009-4-11 07:10:
@echo off&setlocal ENABLEDELAYEDEXPANSION
for /r d:\dd %%a in (*.*) do (set name=%%~na&if not "!name:123=!"=="!name! goto :continu)
goto :eof
:continu
... 第 ... |
|
这个真复杂!
作者: freeants001
时间: 2009-4-11 07:21
能把第二个文本文档内容贴出来吗?
作者: freeants001
时间: 2009-4-11 07:31
不能贴出来吗~~~
不知下面的命令是否符合你的要求
for /f "tokens=1* delims=\" %%i in (1.txt) do echo "c:\%%~j"
作者: crysis
时间: 2009-4-11 07:35
可以了,谢谢大家!
作者: crysis
时间: 2009-4-11 07:52
文本的全部内容:
[boot loader]
timeout=0
default=%123%\grldr.mbr
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
%123%\grldr.mbr="TEST"
就是想运行批处理后让 %123% 变成Windows所在的盘符比如:c:\ d:\等等
作者: netbenton
时间: 2009-4-11 07:54
set 123=c:\
for /f "delims=" %%a in (aa.txt) do call echo.%%a
呵呵,这个不行,变量不可以是数字开头,不好意思,发错了。
[
Last edited by netbenton on 2009-4-11 at 06:04 ]
作者: crysis
时间: 2009-4-11 07:57
盘符也需要变量,如果系统在D盘,则自动判断为D盘
作者: netbenton
时间: 2009-4-11 08:19
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do set a=%%a& call :sub
Pause
goto :eof
:sub
setlocal ENABLEDELAYEDEXPANSION
set a=!a:%%=###!
endlocal&set a=%a%
set a=%a:###=!%
setlocal ENABLEDELAYEDEXPANSION
echo.%a%
endlocal
goto :eof
这次可以了
作者: crysis
时间: 2009-4-11 08:46
非常感谢!
作者: freeants001
时间: 2009-4-11 12:14
受15楼启发,把代码精简了下
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do set/p a=%%a<nul|more
作者: netbenton
时间: 2009-4-11 13:15
标题: 原来还可以这样用
换一种方法也可以。
可是不明白是什么意思
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do cd.|echo.%%a
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do echo.%%a>>aa.txt|rem
type aa.txt
[
Last edited by netbenton on 2009-4-11 at 11:23 ]
作者: freeants001
时间: 2009-4-11 20:39
这样试试看
echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do pause>nul|echo.%%a
pause
pause>nul|echo.是否显示
作者: freeants001
时间: 2009-4-11 20:43
还有
pause>nul&echo.是否显示
作者: netbenton
时间: 2009-4-11 20:56
测试了一下,17楼以后的方法虽然代码精简了,可是太耗时了,用时27到60毫秒,
而15楼的用时才1毫秒
作者: freeants001
时间: 2009-4-11 21:28
最快的还是兄的18楼的第一段代码^-^
作者: freeants001
时间: 2009-4-11 21:37
不明白
pause>nul|echo 为什么会显示出来
作者: freeants001
时间: 2009-4-11 21:47
pause>nul|echo 为什么会显示出来>con|echo 这里也显示出来>con|echo 这里是三行
还有上面的代码在命令行窗口重复运行,显示结果不一样
这是怎么回事

作者: freeants001
时间: 2009-4-11 21:48
pause>nul|echo 为什么会显示出来>con|echo 这里也显示出来>con|echo 这里是三行
还有上面的代码在命令行窗口重复运行,显示结果不一样
这是怎么回事
作者: freeants001
时间: 2009-4-11 21:50
===================
为什么会显示出来
这里也显示出来
这里是三行
==================
为什么会显示出来
这里是三行
这里也显示出来
=================
出现上面两种显示结果

作者: freeants001
时间: 2009-4-11 21:54
经多示试验还有显示
========================
这里也显示出来
这里是三行
为什么会显示出来
=====================
汗,会不会出现6种结果~~~~
作者: netbenton
时间: 2009-4-12 00:39
经试验,最快的是15楼的代码1毫秒,然后是17楼27毫秒,最后是18楼40~50毫秒
不明白的是:为什么用内部命令时反而比more外部命令慢?
我的猜想:
为什么17楼后的代码会起到变量延迟的作用?
是因为在进行管道操作时,已“跑”出批处理程序的外面,也就是把控制权交给了其它外部程序。
而使用外部命令more时,直接交给了more.exe,但是使用内部命令时,应该是交给了另外一个命令解释器,也就是另外调用一次cmd.exe, 然后执行它的一个内部命令。
因为运行一次cmd.exe的速度比运行一次more.exe的速度要慢,所以用more时的速度更快一点。
上面只是我的一个猜想。
作者: freeants001
时间: 2009-4-12 01:23
应该是管道命令的作用,管道命令后的more换成能接受流的findstr也可以
@echo off
set 123=%systemroot%
setlocal enabledelayedexpansion
for /f "delims=" %%a in (b.txt) do echo.%%a|findstr .
pause
作者: freeants001
时间: 2009-4-12 01:24
上面的setlocal enabledelayedexpansion 可以去掉
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do echo.%%a|findstr .
pause