【发布时间】:2011-09-23 00:56:12
【问题描述】:
在 Windows XP 批处理文件中,我正在获取一个 FTP 目录列表并使用 For /F 循环对其进行处理。包含文件名的最后一个标记以回车符 (0D) 作为变量中的最后一个字符结束。检索到后,我尝试使用令牌中的值失败,因为回车导致我的 If 语句换行到行首。
@echo off
for /f "tokens=1,4 delims=" %%A in ('ftp -s:dir.ftp') do (
if 'Stuff.zip'=='%%B' Set StuffDate=%%A
)
echo Stuff.zip was saved on %StuffDate%.
要处理的内容如下:
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
01-04-10 10:00AM 93882 Logo.jpg
02-05-10 11:01PM <DIR> PCODE
03-06-10 12:02PM 42333443 Saved stuff.zip
04-07-10 12:42PM 49343848 Stuff.zip
226 Transfer complete.
使用十六进制编辑器检查时,每行以 0D 0D 0A 结尾,而不仅仅是 0D 0A。我不确定为什么会有额外的 0D,但我需要删除它才能让我的程序运行。
在执行期间,当 %%B 等于 Stuff.zip 时,If 应如下所示:
( if 'Stuff.zip'=='Stuff.zip' Set ReleaseDate=04-07-10 )
由于 CR,If 行最终看起来像这样:
' Set ReleaseDate=04-07-10 ) 'Stuff.zip
( if 'Stuff.zip'=='Stuff.zip 在处理 0D 回车时被覆盖。
如何去掉环境变量末尾多余的 0D?
【问题讨论】:
标签: command-line ftp batch-file environment-variables token