2010-12-02 210 views
1

大约3天前,我问了一个问题,它可以在这里找到:我刚刚创建的文本文件的“访问被拒绝”错误消息?

how to replace a string on the second line in a text file using a batch file?

我将在一个文本文件中的字母各自的数目。我收到了诸如“拒绝访问”和“无法找到此文件”之类的错误消息 - 但是同样的批处理文件给了我所有这些错误也是使这些文本文件开始的错误消息!所以它应该和批处理文件本身在同一个目录下(除非另有指定),对吗?我甚至去了那个文件夹,检查了一下,他们在那里。

我确实添加了一个小脚本来隐藏创建后的文件,这样看起来不会太杂乱。我是通过使用

attrib +h C:\script\%name%.txt 

用这个命令隐藏一个文件使它不可见批处理程序正在搜索/调用它?

下面是对文件的链接,“stringparsing.bat”:http://uploading.com/files/a1m1d2f4/stringparsing.bat/

如果你能帮助我得到这个程序来执行任务,没有它,将不胜感激任何错误!

下面是完整的 “stringparsing.bat” 文件:

@echo off 
setlocal enabledelayedexpansion 
title BETA 
cls 
cd C:\script\st 
echo. 
echo. 
echo. 
echo  Setting Variables... 
echo  Loading Language Database... 

:: ################################################################################### 
:: CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE 
:: ################################################################################### 




TIMEOUT /t 5 /nobreak > nul 

goto MAIN 

:MAIN 
set foo=0 
cls 
echo. 
echo. 
echo. 
echo. 
echo   =================================== 
echo    #################################   
echo    #######  Main Menu: ####### 
echo    ################################# 
echo   =================================== 
echo. 
echo. 
echo    1.) Create New Language File... 
echo. 
echo    2.) Load Existing Lanuage File... 
echo. 
echo    3.) Settings... 

echo --------------------------------------------------------- 

SET /p CHOICE= Select a Function: 
IF %CHOICE%== 1 GOTO CREATE 
IF %CHOICE%== 2 GOTO LOAD 
IF %CHOICE%== 3 GOTO SETTINGS 

GOTO MAIN 

:CREATE 
cls 
title Step 1 
echo. 
echo. 
echo. 
echo   ================================================================================= 
echo. 
set /p name= please type a name for your new language file: 
echo. 
echo   ================================================================================= 
cls 
echo. > %name%.txt 
echo. 
echo. 
echo. 
echo  ============================================================== 
echo  ############################################################## 
echo  #============================================================# 
echo  #               # 
echo  # - After you hit enter you will be redirected    # 
echo  # to a Live Typer. so anything you type into    # 
echo  # it will be sent to %name%.txt.       # 
echo  #               # 
echo  #               # 
echo  # - Next, select load language File For Encoding!   # 
echo  #               # 
echo  #============================================================# 
echo  ############################################################## 
echo  ============================================================== 

set /p line1= : 
echo %line1% >> %name%.txt 2> nul 


echo %name% > Language_File.txt 
attrib +h Language_File.txt 
set /a foo+ =1 
) 
echo. 
echo ========================================================== 

goto LOAD 



:LOAD 
set /a foo+ =1 
IF %foo%== 2 goto loadexternal 
goto LOAD23 

:loadexternal 
echo. 
echo language file is loading now! 
set /p name=<Language_File.txt 
timeout /t 4 /nobreak > nul 
echo. 
echo. 
echo Language_File Loaded! 
pause >nul 
goto LOAD23 

:LOAD23 
cls 
echo. 
echo. 
echo. 
echo. 
echo. 
echo  Encoding Your Language File... Please Wait... 
echo. 
echo. 
echo. 

for /f "delims=" %%i in (!name!.txt) do ( 
echo translating "%%i" 
set var=%%i 
set var=!var:a=1 ! 
set var=!var:b=2 ! 
set var=!var:c=3 ! 
set var=!var:d=4 ! 
set var=!var:e=5 ! 
set var=!var:f=6 ! 
set var=!var:g=7 ! 
set var=!var:h=8 ! 
set var=!var:i=9 ! 
set var=!var:j=10 ! 
set var=!var:k=11 ! 
set var=!var:l=12 ! 
set var=!var:m=13 ! 
set var=!var:n=14 ! 
set var=!var:o=15 ! 
set var=!var:p=16 ! 
set var=!var:q=17 ! 
set var=!var:r=18 ! 
set var=!var:s=19 ! 
set var=!var:t=20 ! 
set var=!var:u=21 ! 
set var=!var:v=22 ! 
set var=!var:w=23 ! 
set var=!var:x=24 ! 
set var=!var:y=25 ! 
set var=!var:z=26 ! 

echo !var! 
) 

echo !var! > !name!.txt 

pause >nul 
TIMEOUT /t 5 /nobreak > nul 

goto MAIN 


:END 
cls 
title SHUTTING DOWN... 
echo. 
echo. 
echo. 
echo   Terminating service stream... 
echo. 
echo. 
echo. 
echo. 
echo   Done! Thank you for using this program! 
TIMEOUT /t 5 /nobreak > nul 





::(%xx%) -1 I/O Stream= "SHELL.dll" 
:: IF EXIST [&1[Parser_2009]] exit 

Exit 


:: ##################################################################################### 
+0

无法访问该文件只是粘贴在代码中。 – Keng 2010-12-02 21:59:40

+0

这个链接对我来说工作得很好......但是,生病粘贴代码 – daniel11 2010-12-03 00:38:25

+0

我尝试发布代码,但它没有保持格式化,因此混淆了..只需按照我的帖子底部的链接完整副本脚本 – daniel11 2010-12-03 00:45:06

回答

1

你有几个问题。首先,访问被拒绝的问题来自您重定向到隐藏文件。

echo %name% > Language_File.txt 
attrib +h Language_File.txt 

请注意,第一次运行脚本时,它将工作,因为Language_File.txt不会存在,因此不会被隐藏。第二次运行它时,您将会拒绝访问。我不知道Windows为什么不让你这样做。你可以用几种方法解决这个问题。

1.将您的文件保存到用户的临时目录。采用这种方法你的目录不会混乱。

echo %name% > %TMP%\Language_File.txt 

2.您的文件保存到你自己的,这样它不会弄乱脚本目录的子目录。

if not exist workspace mkdir workspace 
echo %name% > workspace\Language_File.txt 

取消隐藏文件使用之前。由于该文件在第一次运行脚本时可能不存在,因此如果存在该文件,则应该只有attrib -h

if exist Language_File.txt attrib -h Language_File.txt 
echo %name% > %TMP%\Language_File.txt 
attrib +h Language_File.txt 

4.不要使用Language_File.txt了!我不明白你为什么需要它。只需使用变量来保存语言文件的名称即可。事实上,你已经有了%name%这个名字,对吧?

其次,你应该检查你的变量的值,看看他们真正拥有什么。将Language_File.txt的内容加载到变量中时,它将加载所有内容。这包括隐藏的换行符\r\n,尽管脚本似乎将它们作为空格带入变量。请参阅:

c:\batch\t>echo language file is loading now! 
language file is loading now 
C:\batch\t>set /p name= <Language_File.txt 
C:\batch\t>echo -%name%- 
-langfile - 

如果您回应%name%用连字符包围,你可以看到有后2位来自(大概)的换行符。要解决这个问题,你可以使用set来修剪尾部的字符。

C:\batch\t>echo language file is loading now! 
language file is loading now 
C:\batch\t>set /p name= <Language_File.txt 
C:\batch\t>set name=%name:~0,-2% 
C:\batch\t>echo -%name%- 
-langfile- 

在第二个例子中,'%name%'没有隐藏字符。

最后,您只需使用!即可访问您在for循环内设置的变量。因此,所有对!name!的引用都应该是%name%。这可能是你的“无法找到文件”错误。

0

继承人 “stringparsing.bat” 文件:

@echo off 
setlocal enabledelayedexpansion 
title BETA 
cls 
cd C:\script\st 
echo. 
echo. 
echo. 
echo  Setting Variables... 
echo  Loading Language Database... 

:: ################################################################################### 
:: CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE 
:: ################################################################################### 




TIMEOUT /t 5 /nobreak > nul 

goto MAIN 

:MAIN 
set foo=0 
cls 
echo. 
echo. 
echo. 
echo. 
echo   =================================== 
echo    #################################   
echo    #######  Main Menu: ####### 
echo    ################################# 
echo   =================================== 
echo. 
echo. 
echo    1.) Create New Language File... 
echo. 
echo    2.) Load Existing Lanuage File... 
echo. 
echo    3.) Settings... 

echo --------------------------------------------------------- 

SET /p CHOICE= Select a Function: 
IF %CHOICE%== 1 GOTO CREATE 
IF %CHOICE%== 2 GOTO LOAD 
IF %CHOICE%== 3 GOTO SETTINGS 

GOTO MAIN 

:CREATE 
cls 
title Step 1 
echo. 
echo. 
echo. 
echo   ================================================================================= 
echo. 
set /p name= please type a name for your new language file: 
echo. 
echo   ================================================================================= 
cls 
echo. > %name%.txt 
echo. 
echo. 
echo. 
echo  ============================================================== 
echo  ############################################################## 
echo  #============================================================# 
echo  #               # 
echo  # - After you hit enter you will be redirected    # 
echo  # to a Live Typer. so anything you type into    # 
echo  # it will be sent to %name%.txt.       # 
echo  #               # 
echo  #               # 
echo  # - Next, select load language File For Encoding!   # 
echo  #               # 
echo  #============================================================# 
echo  ############################################################## 
echo  ============================================================== 

set /p line1= : 
echo %line1% >> %name%.txt 2> nul 


echo %name% > Language_File.txt 
attrib +h Language_File.txt 
set /a foo+ =1 
) 
echo. 
echo ========================================================== 

goto LOAD 



:LOAD 
set /a foo+ =1 
IF %foo%== 2 goto loadexternal 
goto LOAD23 

:loadexternal 
echo. 
echo language file is loading now! 
set /p name=<Language_File.txt 
timeout /t 4 /nobreak > nul 
echo. 
echo. 
echo Language_File Loaded! 
pause >nul 
goto LOAD23 

:LOAD23 
cls 
echo. 
echo. 
echo. 
echo. 
echo. 
echo  Encoding Your Language File... Please Wait... 
echo. 
echo. 
echo. 

for /f "delims=" %%i in (!name!.txt) do ( 
echo translating "%%i" 
set var=%%i 
set var=!var:a=1 ! 
set var=!var:b=2 ! 
set var=!var:c=3 ! 
set var=!var:d=4 ! 
set var=!var:e=5 ! 
set var=!var:f=6 ! 
set var=!var:g=7 ! 
set var=!var:h=8 ! 
set var=!var:i=9 ! 
set var=!var:j=10 ! 
set var=!var:k=11 ! 
set var=!var:l=12 ! 
set var=!var:m=13 ! 
set var=!var:n=14 ! 
set var=!var:o=15 ! 
set var=!var:p=16 ! 
set var=!var:q=17 ! 
set var=!var:r=18 ! 
set var=!var:s=19 ! 
set var=!var:t=20 ! 
set var=!var:u=21 ! 
set var=!var:v=22 ! 
set var=!var:w=23 ! 
set var=!var:x=24 ! 
set var=!var:y=25 ! 
set var=!var:z=26 ! 

echo !var! 
) 

echo !var! > !name!.txt 

pause >nul 
TIMEOUT /t 5 /nobreak > nul 

goto MAIN 


:END 
cls 
title SHUTTING DOWN... 
echo. 
echo. 
echo. 
echo   Terminating service stream... 
echo. 
echo. 
echo. 
echo. 
echo   Done! Thank you for using this program! 
TIMEOUT /t 5 /nobreak > nul 





::(%xx%) -1 I/O Stream= "SHELL.dll" 
:: IF EXIST [&1[Parser_2009]] exit 

Exit 


:: ##################################################################################### 

我终于学会了如何格式化代码段。 (继承人链接到它的另一个副本,如果你需要它。)

how to replace a string on the second line in a text file using a batch file?

相关问题