2014-11-25 68 views
0

我做了如下的批处理脚本:我的非特定于路径的批处理脚本仅适用于某些路径...为什么?

::@ECHO OFF 
echo %date% %time% Starting File Splitter 

set year=%date:~-4% 
set month=%date:~3,2% 
set day=%date:~0,2% 
set hour=%time:~0,2% 
set minute=%time:~3,2% 
set second=%time:~6,2% 
set folderName=%year%-%month%-%day%-%hour%-%minute%-%second% 
set folderName=%folderName: =% 
SET logger="%~dp0"\%folderName%.log 

cls 
setlocal enabledelayedexpansion 

set ctr=0 
set name=Startup 
for /f "tokens=*" %%1 in (pppclient.log) do (
    set inline=%%1 
    Echo.!inline! | findstr /C:"Starting PosPay Client... ">nul && (
     set name=Startup 
     set /a ctr+=1 
    ) 
    Echo.!inline! | findstr /C:"/purchase ">nul && (
     set name=Purchase 
     set /a ctr+=1 
    ) 
    Echo !inline! >>!ctr!_!name!.log 
) 

摆在首位,因为我希望它这个工作而已。但是,有时当我将脚本复制粘贴到不同的路径时,它会突然没有任何操作。 它会说没有找到pppclient.log文件 - 但文件在那里!为什么??

+1

脚本是否输出一些错误?意思是“不工作”? – npocmaka 2014-11-25 09:02:38

回答

0

有三种可能的原因:

  1. 你也许想到的是,当前的工作目录是批处理文件的目录。但是当前的工作目录可能是不同的。添加一行echo Working directory is: %CD%以查看执行批处理文件时的当前工作目录。

  2. Permissions for files and folders设置为允许在文件夹中列出文件和子文件夹,但现在允许读取文件中的数据。

  3. 文件pppclient.log通过与CFile::shareExclusive其他应用程序,这意味着没有其他应用程序可以读取或只要写入该文件的应用程序打开它(写操作)当前打开的。

应用程序写入此日志文件时,经常阻止对日志文件的读取访问。

您可以从Sysinternals(Microsoft)的免费工具Process Monitor找到为什么日志文件“无法找到”。