Board logo

标题: 为何这一P处理不能在NT4.0上运行 [打印本页]

作者: joshualaw     时间: 2007-6-27 11:06    标题: 为何这一P处理不能在NT4.0上运行

各位高手:
请帮忙看看为何这一P处理不能在NT4.0上运行,但可在WIN2K 和XP 上运行,请帮忙修改下, 谢

for /f "delims=" %%i in ('dir /b *.txt') do (
  findstr /b /r "\<TP\>" "%%i"
  if !errorlevel!==0 copy "%%i" C:\123\"%%i"&del /q /f "%%i"
)

[ Last edited by joshualaw on 2007-6-27 at 11:07 AM ]
作者: zasxcdfv     时间: 2007-6-27 11:13
没有nt4.0系统
一般来说都会给错误提示的吧?
作者: HAT     时间: 2007-6-27 11:43
没有nt4.0系统
是否需要把"delims="改为"delims= "
作者: joshualaw     时间: 2007-6-27 11:56


  Quote:
Originally posted by HAT at 2007-6-27 11:43 AM:
没有nt4.0系统
是否需要把"delims="改为"delims= "

请看看我在C:\VER 的两个图片:

[ Last edited by joshualaw on 2007-6-27 at 11:59 AM ]
附件 1: nt.jpg (2007-6-27 11:58, 9.06 K,下载次数: 2)


附件 2: xp.jpg (2007-6-27 11:59, 7.65 K,下载次数: 1)



作者: zasxcdfv     时间: 2007-6-27 12:27


  Quote:
Originally posted by joshualaw at 2007-6-27 11:56 AM:

请看看我在C:\VER 的两个图片:

[ Last edited by joshualaw on 2007-6-27 at 11:59 AM ]

???
作者: joshualaw     时间: 2007-6-27 13:14


  Quote:
Originally posted by zasxcdfv at 2007-6-27 12:27 PM:

???

这两个图片是告知大家两个不同的操作系统和版本

1》在Windows NT 4.0 上不能运行,也没有错误信息返回,(只能从结果知道,这一功能不能实现)

2》Windows XP 可实现这一功能
作者: zh159     时间: 2007-6-27 13:15
NT4.0很老了,NT4.0的for不知道有没有这些参数

贴上for /?的参数看看
作者: lasting     时间: 2007-6-27 13:40
在批处理的结尾加 PAUSE  看清楚不能运行还是没有此命令。
作者: HAT     时间: 2007-6-27 14:04
2楼和3楼的意思是:
他们没有安装nt4.0系统,而不是说nt4.0系统不存在^_^

如 zh159 兄所说,贴上for /?的帮助信息看看
作者: qzwqzw     时间: 2007-6-27 14:29
印象中nt4缺省不开启命令扩展

使用SETLOCAL ENABLEEXTENSIONS开启
作者: joshualaw     时间: 2007-6-27 15:17


  Quote:
Originally posted by qzwqzw at 2007-6-27 02:29 PM:
印象中nt4缺省不开启命令扩展

使用SETLOCAL ENABLEEXTENSIONS开启

在P处理开头,我使用下列命令,请看看是否对错.
@echo off&setlocal enabledelayedexpansion

也付上NT4.0 help file for your ref.
附件 1: NT for help.txt (2007-6-27 15:17, 6.32 K,下载次数: 14)

作者: zh159     时间: 2007-6-27 16:46
没NT4.0测试,但首先要修正一个地方:
if !errorlevel!==0 copy "%%i" C:\123\"%%i"&del /q /f "%%i"
这里一个“&”会造成“copy”、“del”两个命令同时运行,有可能会出错,改为:
if !errorlevel!==0 copy "%%i" C:\123\"%%i"&&del /q /f "%%i"
这样会等待“copy”命令完成后再执行“del”命令
作者: joshualaw     时间: 2007-6-28 10:57
我多加了一个&,但还是不行啊. 所有的文件全部copy 到了C:\456\下面,请帮忙看看啊

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.txt') do (
  findstr /b /r "\<TP\>" "%%i"
  if !errorlevel!==0 copy "%%i" C:\123\"%%i"&&del /q /f "%%i"
)
copy *.txt C:\456\*.txt
del /q /f *.txt
作者: qzwqzw     时间: 2007-6-28 11:45
@echo off&setlocal enabledelayedexpansion

改成

@echo off&setlocal enabledelayedexpansion ENABLEEXTENSIONS
作者: joshualaw     时间: 2007-6-28 15:16


  Quote:
Originally posted by qzwqzw at 2007-6-28 11:45 AM:
@echo off&setlocal enabledelayedexpansion

改成

@echo off&setlocal enabledelayedexpansion ENABLEEXTENSIONS

还是不行哦,现象还是一样,好象下列语句起不了作用啊.

for /f "delims=" %%i in ('dir /b *.txt') do (
  findstr /b /r "\<TP\>" "%%i"
  if !errorlevel!==0 copy "%%i" C:\123\"%%i"&&del /q /f "%%i"
)
作者: qzwqzw     时间: 2007-6-28 17:12
在代码中加一些的调试语句
就可以确定问题的出处了

比如,在for内部插入一行
echo %%i & pause

在 findstr 后插入
echo !errorlevel! & pause

这些是基本的调试技巧

---------------------------------------

印象中!errorlevel!的用法是有问题的
不过还是先看看你的调试结果再说

findstr /b /r "\<TP\>" "%%i" && copy "%%i" C:\123\"%%i"&&del /q /f "%%i"
作者: joshualaw     时间: 2007-6-29 16:03


  Quote:
Originally posted by qzwqzw at 2007-6-28 05:12 PM:
在代码中加一些的调试语句
就可以确定问题的出处了

比如,在for内部插入一行
echo %%i & pause

在 findstr 后插入echo !errorlevel! & pause

这些是 ...

在NT 4.0 上,我用了下列环境变量,但说环境变量无效,和没有errorlevel代吗返回,如下图.

@echo off&setlocal enabledelayedexpansion ENABLEEXTENSIONS

[ Last edited by joshualaw on 2007-6-29 at 04:05 PM ]
附件 1: errorlevel.jpg (2007-6-29 16:03, 9.84 K,下载次数: 1)



作者: wudixin96     时间: 2007-6-29 16:10
把@echo off注释掉。

然后把P拖到cmd中运行。就可以发现是哪里出错了。
作者: HAT     时间: 2007-6-29 16:23
//在NT 4.0 上,我用了下列环境变量,但说环境变量无效,和没有errorlevel代吗返回

NT 4.0好像没有errorlevel吧,记得willsort斑竹似乎说过
作者: qzwqzw     时间: 2007-6-29 18:51
errorlevel变量属于命令扩展的内容
NT4应该是支持的

从你的错误来看
可能setlocal的用法有问题

将它拆成两句
setlocal ENABLEDELAYEDEXPANSION
setlocal ENABLEEXTENSIONS

如果还不行,就help setlocal看一下setlocal的参数
作者: joshualaw     时间: 2007-7-4 00:16
谢谢各位,问题已解决啦