2010-12-02 79 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?

相關問題