2010-12-02 49 views
1

il y a environ 3 jours, j'ai posé une question, qui se trouve ici:"Accès refusé" Message d'erreur pour un fichier texte que je viens de faire?

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

Je suis convertir les lettres dans un fichier texte dans leurs numéros respectifs. Je reçois des messages d'erreur tels que "Accès refusé" et "Impossible de trouver ce fichier" - mais le même fichier batch qui me donne toutes ces erreurs est aussi celui qui a fait ces fichiers texte pour commencer! Donc, il devrait être dans le même répertoire que le fichier de commandes lui-même (sauf indication contraire), non? Je suis même allé à ce dossier et vérifié, et ils sont là.

J'ai ajouté un petit script pour cacher les fichiers après qu'ils aient été créés de manière à ne pas avoir l'air si encombré. Je l'ai fait en utilisant

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

Would cacher un fichier avec cette commande le rendre invisible aux programmes de traitement par lots qui sont à la recherche pour elle/appel à elle?

Voici un lien vers le fichier, « stringparsing.bat »: http://uploading.com/files/a1m1d2f4/stringparsing.bat/

Si vous pouviez me aider à obtenir ce programme pour mener à bien sa tâche sans aucune erreur, il serait grandement apprécié!

Voici le fichier "stringparsing.bat" en pleine:

@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

Impossible d'accéder au fichier, collez simplement le code. – Keng

+0

le lien a bien fonctionné pour moi ... mais oui mal coller le code – daniel11

+0

j'ai essayé de poster le code mais il n'a pas gardé le formatage et donc a confondu ... il suffit de suivre le lien au bas de mon message pour la copie complète de le script – daniel11

Répondre

1

Vous avez quelques problèmes. Tout d'abord, le problème d'accès refusé provient de votre redirection vers un fichier caché.

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

Notez que la première fois que vous exécutez le script, il fonctionnera, car Language_File.txt n'existera et ne sera donc pas caché. La deuxième fois que vous l'exécutez, l'accès est refusé. Je ne sais pas pourquoi Windows ne vous laisse pas faire ça. Vous pouvez résoudre ce problème de deux façons.

1. Enregistrez votre fichier dans le répertoire temporaire de l'utilisateur. Avec cette approche, votre répertoire ne sera pas encombré.

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

2. Enregistrez votre fichier dans un sous-répertoire que vous possédez afin qu'il n'encombre pas le répertoire du script.

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

3. Démasquer le fichier avant de l'utiliser. Comme le fichier peut ne pas exister la première fois que vous exécutez le script, vous devriez peut-être seulement attrib -h s'il existe.

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

4. Ne pas utiliser Language_File.txt du tout!Je ne vois pas pourquoi tu en as besoin. Utilisez simplement des variables pour contenir le nom du fichier de langue. En fait, vous avez déjà le nom en %name%, n'est-ce pas? Deuxièmement, vous devriez vérifier la valeur de vos variables pour voir ce qu'elles contiennent réellement. Lorsque vous chargez le contenu de Language_File.txt dans votre variable, il charge tout le contenu. Cela inclut les caractères de nouvelle ligne cachés \r\n, bien que le script semble les amener dans la variable en tant qu'espaces. Voir:

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 - 

Si vous écho %name% entouré de traits d'union, vous pouvez voir qu'il ya 2 places après il de (probablement) les sauts de ligne. Pour résoudre ce problème, vous pouvez utiliser set pour découper les caractères de fin.

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- 

Dans le deuxième exemple, `% name% ne possède pas les caractères cachés. Enfin, vous n'avez besoin d'utiliser que ! pour accéder aux variables que vous avez définies dans la boucle for. Donc toutes les références à !name! devraient être %name% à la place. C'est probablement votre erreur "Impossible de trouver le fichier".

+0

ok c'est parfait! Merci! en passant, j'ai utilisé le fichier de langue pour stocker le nom de l'autre fichier texte que l'utilisateur entre, parce que si l'utilisateur crée simplement le fichier texte, puis une fois de retour au menu principal, ils ferment le programme, quand ils rouvrent le le nom de leur fichier sera toujours stocké dans le fichier de langue! les variables sont réinitialisées à la sortie de la fenêtre de ligne de commande en cours malheureusement ... de toute façon merci encore !! – daniel11

+0

J'ai eu un problème .... J'ai corrigé l'accès refusé l'erreur, mais que l'erreur "windows ne trouve pas le fichier spécifié" est vraiment confuse, je l'ai testé dans une ligne de commande normale, "type frenchy.txt" affiche le contenu de le fichier texte que j'ai créé, "set/p var =% name% .txt" affiche l'erreur. Cependant, après cela, j'ai tapé "echo% name%" et il a affiché le contenu du fichier texte. Le problème réside donc dans l'utilisation (ou la mauvaise utilisation) de la commande set/p avec un vairable. J'espère que cela vous aidera à développer votre concept. – daniel11

0

Heres le fichier "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 


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

j'ai finalement appris comment formater l'extrait de code. (Heres un lien vers une autre copie de celui-ci si vous en avez besoin.)

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

+0

Il n'est pas nécessaire d'appuyer sur Entrée après chaque ligne. Collez votre code dans la zone de texte et mettez-le en surbrillance. Ensuite, au-dessus de la zone de texte où vous l'avez collé, vous verrez une barre d'outils. Cliquez sur le "101010" bouton pour le convertir en un bloc de code. Vous pouvez supprimer cette réponse que vous avez laissée (vous devriez voir un lien de suppression sur lequel vous pouvez cliquer) car j'ai déjà modifié votre message pour ajouter le code. (Ne supprimez pas la question que vous avez postée, il suffit de supprimer cette réponse) – indiv

+0

Malheureusement, il ne me permettra pas de le supprimer, ou je suis simplement inconscient de ce lien "supprimer" ... Je ne vois que modifier, lien, et les boutons de drapeau au bas de la réponse j'ai posté ... – daniel11