标题: 如何使用两个变量?
[打印本页]
作者: threesecond
时间: 2008-1-9 12:38
标题: 如何使用两个变量?
我有一个文字文文件 file_list.dat 范例如下
http://download.microsoft.com/do ... wsXP-KBxxxxxxxx.exe
http://download.microsoft.com/do ... fc3074/WindowsXP-KB xxxxxxxx.exe
http://download.microsoft.com/do ... 1d68a1/WindowsXP-KB xxxxxxxx.exe
我想做的批处理如下:
::撷取网址中的最后一个文件名
FOR /F "tokens=8 delims=/ " %%a in (file_list.dat) do set file_name=%%a
::撷取整列网址
FOR /F %%b in (file_list.dat) do set file_url=%%b
::然后我想判断文件是否存在,若不存在则下载,且要 for ….do 循环处理多列,
if exit % file_name % (
xcopy %file_name% Folder\ /y
) else (
wget %file_url%
)
pause
exit
但始终不成功,请各位帮我看看该如何写?
[
Last edited by threesecond on 2008-1-9 at 12:41 PM ]
作者: abcd
时间: 2008-1-9 12:41
是提取这个??WindowsXP-KB xxxxxxxx-exe
还是这个xxxxxxxx-exe
作者: threesecond
时间: 2008-1-9 12:44
%file_name% 需提取WindowsXP-KBxxxxxxxx.exe
%file_url% 则提取整个 URL (含WindowsXP-KBxxxxxxxx.exe)
以上两个提取已经以 echo 测试 ok,但合并使用在下面的 if exit 就出问题了。
作者: chenall
时间: 2008-1-9 12:47
没有说清楚.
::撷取网址中的最后一个文件名
是要每个网址后面的文件名还是要列表中的最后一个文件名.
按你的
FOR /F "tokens=8 delims=/ " %%a in (file_list.dat) set file_name=%%a
应该是要每个网的最后一个文件名,但是这个语句的结果是取列表的最后一个文件名.
我按照我的理解给你改一个,不知是否可用.
刚发完,返回就发现已经有好几个回贴了,可以结合5楼的修改一下.
是个不错的方法.
Quote: |
- FOR /F %%b in (file_list.dat) (
- set file_url=%%b
- call :check
- )
- goto :eof
- :check
- if not defined file_url goto :eof
- FOR /F "tokens=8 delims=/ " %%a in (%file_url%) set file_name=%%a
- if exit %file_name% (
- xcopy %file_name% Folder\ /y
- ) else (
- wget %file_url%
- )
- goto :eof
chenall 发表于: 2008-01-09 09:25 |
|
[
Last edited by chenall on 2008-1-9 at 12:51 PM ]
作者: abcd
时间: 2008-1-9 12:48
@echo off
for /f "delims=" %%i in (file_list.dat) do (
if not exist "%%~nxi" wget "%%i"
)
作者: threesecond
时间: 2008-1-9 15:13
Quote: |
Originally posted by chenall at 2008-1-9 12:47 PM:
没有说清楚.
::撷取网址中的最后一个文件名
是要每个网址后面的文件名还是要列表中的最后一个文件名.
按你的
FOR /F "tokens=8 delims=/ " %%a in ...
Quote: | FOR /F %%b in (file_list.dat) (
set file_url=%%b
call :check
)
goto :eof
:check
if not defined file_url goto :eof
FOR /F "tokens=8 delims=/ " %%a in (%file_url%) set file_name=%%a
if exit %file_name% (
xcopy %file_name% Folder\ /y
) else (
wget %file_url%
)
goto :eof |
|
|
|
我要提取每一个网址最后的文件名
我想您理解我的意思了,但仍有些小问题,
第1和第10列应该加上 do 才能运行 set 是吧?
我修改了后,运行到第10列,%file_name% 却变成了 URL 网址了,而非文件名,
FOR /F "tokens=8 delims=/ " %%a in (%file_url%) set file_name=%%a
这行的in (%file_url%) 会变成找不到文件,
(将网址当作文件名了,当然找不到了)
该怎么办?
[
Last edited by threesecond on 2008-1-9 at 03:22 PM ]
作者: lxmxn
时间: 2008-1-9 15:45
标题: 试试这个,没有测试:
@echo off & SetLocal EnableDelayedExpansion
for /f "delims=" %%a in (file_list.dat) do (
set filename=%%~nxa
if not exist "!filename!" (wget -q "%%~a") else (copy /y "!filename!" folder)
)
作者: threesecond
时间: 2008-1-9 17:12
试用七楼的办法,稍修改一下就成功了,
果然还是需要SetLocal EnableDelayedExpansion 才能成功哪~~
作者: zh159
时间: 2008-1-9 17:17
7 楼应该可以改为:
for /f "delims=" %%a in (file_list.dat) do if not exist "%%~nxa" (wget -q "%%~a") else (copy /y "%%~nxa" folder)
自己测试