[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理FOR命令运行过程中容易挂掉的求助

  1. @echo off
  2. set /a tm1=%time:~0,2%*1
  3. if %tm1% LSS 10 set tm1=0%tm1%
  4. set filename=%username%%date:~0,4%-%date:~5,2%-%date:~8,2%-%tm1%%time:~3,2%%time:~6,2%
  5. set timename=%date:~0,4%/%date:~5,2%/%date:~8,2% %tm1%:%time:~3,2%:%time:~6,2%
  6. set folder=D:\%username%\FCCCache\%username%
  7. set savefolder=D:\%username%\FCCCache
  8. for /f "delims=""" %%i in ('dir /a-d /b /s %folder%\*.*d* 2^>nul') do (
  9. for /f "tokens=1,2" %%j in ('dir /a /tc "%%i" ^| findstr "%%~nxi"') do (
  10. echo %%j %%k##%%~ti##%%~nxi##%computername%##%username%##%timename%>>%savefolder%\%filename%.txt
  11. ))
  12. exit
复制代码
代码如上,这个代码的作用是调取指定目录下(D:\%username%\FCCCache\%username%) 所有子目录里面的文件名,因为我只需要调用DWG和PDF格式的文件,所在后辍里面用了*d*这个后辍进行筛选,需要收集文件名,文件的创建和修改时间等一些信息。所以导致FOR的语句有点长。
那么问题来了:这个批处理在部分电脑上有运行过程中停用的问题,电脑问题基本可以排除,@echo off 改成 on可以发现运行时代码运行中可能会停下来,不走了。所以求助高手帮忙看下问题是出在哪个地方,谢谢!

代码看不出大问题来。如路径可排除的话看看你的批处理文件名,是否命名成了代码中其个命令或关键字的名字了,还有就是在重定向符的使用上,%timename%中存在数字,最好与>>之间有空格,避免被错误解析。把重定向符提到行首,后面跟回显内容是个不错的选择。

TOP

每台电脑的%username%值不一样?涉及路径的变量最好用""引起来,在set语句中使用""转义是个好习惯。
amwfjhh 发表于 2015-1-21 15:18


非常感谢,%username%这个变量在我这边电脑上的设定,因为都是加过域的计算机,这个变量都是八位的数字,比较统一,所以就没考虑用“”号引起来,这样做是不太严谨,我下次在代码里面修改回来。感谢!

TOP

每台电脑的%username%值不一样?涉及路径的变量最好用""引起来,在set语句中使用""转义是个好习惯。

TOP

我这里测试部分完好,另外,再补充一下你的问题。还有for 挂掉?那是什么。
慕夜蓝化 发表于 2015-1-21 14:00



    额,可能是我表述不清,我的代码里面出问题的就是FOR语句这一段,但也不是完全不用能,只是部分机器运行的时候出问题,但是机器本身也没问题,所以只能拎着代码来求助了。你的代码我再细看一下。谢谢!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set/a tm1=%time::=%*1 >nul 2>nul
  3. for /f %%i in ("%date:/=%") do (
  4.     if %time:~,2% lss 10 set tm1=0%tm1%
  5.     set filename=%username%%%i-!tm1!
  6.     for /f %%a in ("%date%") do (
  7.         set timename=%%a !tm1!%time:~2,-3%
  8.     )
  9. )
  10. call :a "d:\%username%\fcccache\%username%" "d:\%username%\fcccache"
  11. pause&exit
  12. :a
  13. (for /f "delims=" %%i in ('dir /s/b/l/aa "%~1\*.*d*"') do (
  14.     for /f "tokens=1-2" %%a in ('dir /tc "%%~i"^|findstr "%%~nxi" ') do (
  15.     echo,%%a %%b##%%~ti##%%~nxi##%computername%##%username%##%timename%
  16.     )
  17. )) >%~2\%filename%.txt
  18. goto :eof
复制代码
我这里测试部分完好,另外,再补充一下你的问题。还有for 挂掉?那是什么。
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

回复 3# odinliu


    用2楼的代码,找个停掉的例子,截图看看。

TOP

批处理停用停在哪个文件没有特征,在同一台电脑上面,这个代码能偶尔能全部执行完,但大部分是在中间过程就停了。非常苦恼!

TOP

看看出问题的时候正在处理哪个文件

@echo on
set /a tm1=%time:~0,2%*1
if %tm1% LSS 10 set tm1=0%tm1%
set filename=%username%%date:~0,4%-%date:~5,2%-%date:~8,2%-%tm1%%time:~3,2%%time:~6,2%
set timename=%date:~0,4%/%date:~5,2%/%date:~8,2% %tm1%:%time:~3,2%:%time:~6,2%
set folder=D:\%username%\FCCCache\%username%
set savefolder=D:\%username%\FCCCache

for /f "delims=" %%i in ('dir /a-d /b /s %folder%\*.*d* 2^>nul') do (
echo 外层for循环正在处理文件 %%i
for /f "tokens=1,2" %%j in ('dir /a /tc "%%i" ^| findstr "%%~nxi"') do (
echo 内层for循环 %%j %%k##%%~ti##%%~nxi##%computername%##%username%##%timename% %savefolder%\%filename%.txt
echo %%j %%k##%%~ti##%%~nxi##%computername%##%username%##%timename%>>%savefolder%\%filename%.txt
))
pause

TOP

返回列表