2010-12-02 7 views
1

Etwa 3 Tage fragte ich eine Frage, die hier gefunden werden kann:"Zugriff verweigert" Fehlermeldung für eine Textdatei, die ich gerade gemacht habe?

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

ich die Buchstaben in einer Textdatei in ihre jeweiligen Zahlen zu konvertieren. Ich erhalte Fehlermeldungen wie "Zugriff verweigert" und "Kann diese Datei nicht finden" - aber die gleiche Batch-Datei, die mir alle diese Fehler gibt, ist auch derjenige, der diese Textdateien erstellt hat! Also sollte es im selben Verzeichnis wie die Batch-Datei selbst sein (sofern nicht anders angegeben), oder? Ich ging sogar in diesen Ordner und überprüfte, und sie sind da.

Ich habe ein kleines Skript hinzugefügt, um die Dateien zu verstecken, nachdem sie erstellt wurden, so dass sie nicht so überladen aussehen würde. Ich tat dies, indem

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

Would unter Verwendung einer Datei mit diesem Befehl versteckt unsichtbar zu machen, um Batch-Programme, die für sie/Anruf auf sie suchen?

Hier ist ein Link auf die Datei „stringparsing.bat“: http://uploading.com/files/a1m1d2f4/stringparsing.bat/

Wenn Sie mich in immer dieses Programm helfen könnte seine Aufgabe zu erfüllen ohne Fehler wäre es sehr zu schätzen!

Hier ist die "stringparsing.bat" Datei in voller Länge:

@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

Kann nicht auf die Datei nur in den Code einfügen. – Keng

+0

der Link funktionierte gut für mich ... aber yea unpaste den Code – daniel11

+0

Ich versuchte, den Code zu veröffentlichen, aber es nicht die Formatierung beibehalten und daher durcheinander gebracht .. folgen Sie einfach dem Link am Ende meines Beitrags für die vollständige Kopie von Das Skript – daniel11

Antwort

1

Sie haben ein paar Probleme. Das Problem der Zugriffsverweigerung besteht zunächst darin, dass Sie auf eine versteckte Datei umleiten.

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

Beachten Sie, dass das erste Mal, wenn Sie das Skript ausführen, wird es funktionieren, weil Language_File.txt nicht und deshalb existiert nicht ausgeblendet werden. Wenn Sie es das zweite Mal ausführen, wird der Zugriff verweigert. Ich weiß nicht, warum Windows das nicht erlaubt. Sie können dieses Problem auf verschiedene Arten lösen.

1. Speichern Sie Ihre Datei im temporären Verzeichnis des Benutzers. Mit diesem Ansatz wird Ihr Verzeichnis nicht überladen.

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

2. Speichern Sie die Datei in ein Unterverzeichnis, das Sie so besitzen, dass es nicht das Skriptverzeichnis nicht unübersichtlich.

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

3. Unhide die Datei, bevor Sie es benutzen. Da die Datei möglicherweise nicht existiert, wenn Sie das Skript das erste Mal ausführen, sollten Sie vielleicht nur attrib -h, wenn es existiert.

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

4. Sie Language_File.txt nicht verwenden!Ich verstehe nicht, warum du es brauchst. Verwenden Sie Variablen, um den Namen der Sprachdatei zu speichern. In der Tat haben Sie bereits den Namen in %name%, richtig?

Zweitens sollten Sie den Wert Ihrer Variablen überprüfen, um zu sehen, was sie wirklich halten. Wenn Sie den Inhalt von Language_File.txt in Ihre Variable laden, werden alle Inhalte geladen. Dazu gehören die versteckten Newline-Zeichen \r\n, obwohl das Skript sie als Leerzeichen in die Variable zu bringen scheint. Siehe:

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 - 

Wenn Sie %name% durch Bindestriche umgeben Echo, können Sie sehen, dass es zwei Räume, nachdem sie von (vermutlich) die Zeilenumbrüche. Um dieses Problem zu lösen, können Sie set verwenden, um die nachfolgenden Zeichen zu trimmen.

Im zweiten Beispiel enthält `% name% nicht die versteckten Zeichen.

Schließlich müssen Sie nur ! verwenden, um auf Variablen zuzugreifen, die Sie in der for-Schleife festgelegt haben. Also sollten alle Verweise auf !name! stattdessen %name% sein. Das ist wahrscheinlich der Fehler "Datei nicht finden".

+0

ok das ist perfekt! Vielen Dank! Übrigens habe ich die Sprachdatei verwendet, um den Namen der anderen Textdatei zu speichern, die der Benutzer eingibt, denn wenn der Benutzer einfach die Textdatei erstellt und dann im Hauptmenü wieder schließt, schließt er das Programm, wenn er es wieder öffnet Der Name ihrer Datei wird weiterhin in der Sprachdatei gespeichert! Variablen zurückgesetzt beim Beenden des aktuellen Befehlszeilenfensters leider ... trotzdem nochmals vielen Dank !! – daniel11

+0

Ich habe ein Problem .... Ich reparierte den Zugriff verweigert Fehler, jedoch, dass "Windows kann die angegebene Datei nicht finden" Fehler ist wirklich verwirrend, ich habe es in einer normalen Befehlszeile getestet, "Typ frenchy.txt" zeigt den Inhalt von Die von mir erstellte Textdatei "set/p var =% name% .txt" zeigt den Fehler an. Danach habe ich "echo% name%" eingegeben und den Inhalt der Textdatei angezeigt. Das Problem liegt also in der Verwendung (oder bei der falschen Verwendung) des Befehls set/p mit einem Variablen. Ich hoffe, dies hilft Ihnen, Ihr Konzept weiter auszuarbeiten. – daniel11

0

heren die "stringparsing.bat" file:

@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 


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

ich schließlich gelernt, wie der Code-Snippet zu formatieren. (herer einen Link zu einer anderen Kopie davon, wenn Sie sie brauchen.)

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

+0

Sie müssen nach jeder Zeile nicht die Eingabetaste drücken. Fügen Sie Ihren Code in das Textfeld ein und markieren Sie ihn. Über dem Textfeld, in das Sie es eingefügt haben, sehen Sie eine Symbolleiste. Klicken Sie auf die Schaltfläche "101010", um sie in einen Codeblock umzuwandeln. Sie können diese Antwort löschen (Sie sollten einen Link zum Löschen sehen, auf den Sie klicken können), da ich Ihren Beitrag bereits bearbeitet habe, um den Code hinzuzufügen. (Lösche nicht die Frage, die du gepostet hast. Lösche einfach diese Antwort.) – indiv

+0

leider erlaube ich es mir nicht, sie zu löschen, oder ich bin einfach blind gegenüber diesem "delete" link ... ich sehe nur edit, link und flag buttons an der unten auf der Antwort, die ich gepostet habe ... – daniel11