Pregunta

Hace unos 3 días hice una pregunta, que se puede encontrar aquí:

cómo reemplazar una cadena en la segunda línea en un archivo de texto mediante un archivo por lotes?

Me estoy convirtiendo las letras en un archivo de texto en sus respectivos números. Estoy recibiendo mensajes de error como "Acceso denegado" y "No se puede encontrar este archivo" - pero el mismo archivo por lotes que me está dando todos estos errores es también la que hizo estos archivos de texto para empezar! Por lo que debe estar en el mismo directorio que el archivo por lotes en sí (a menos que se especifique lo contrario), ¿verdad? Incluso fui a esa carpeta y comprobado, y que están ahí.

Hice añadir un pequeño script para ocultar los archivos después de que fueron creados para que no se vería tan atestado. Hice esto usando

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

¿Podría ocultar un archivo con este comando que sea invisible para los programas por lotes que están buscando it / llamada en él?

Aquí hay un enlace al archivo, "stringparsing.bat": http: // subir .com / archivos / a1m1d2f4 / stringparsing.bat /

Si usted me podría ayudar a conseguir este programa para llevar a cabo su tarea sin ningún error sería muy apreciada!

Aquí está el archivo "stringparsing.bat" en su totalidad:

@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


:: #####################################################################################
¿Fue útil?

Solución

Tienes algunos problemas. En primer lugar, el problema de acceso denegado es de usted volver a dirigir a un archivo oculto.

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

Tenga en cuenta que la primera vez que se ejecuta la secuencia de comandos, que funcionará porque Language_File.txt no existirá y por lo tanto no se ocultará. La segunda vez que se ejecuta, obtendrá acceso denegado. No sé por qué Windows no le permite hacer eso. Puede resolver este problema en un par de maneras.

1. Guardar el archivo en el directorio temporal del usuario. Con este enfoque su directorio no conseguirá desordenado.

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

2. guardar el archivo en un subdirectorio de su propiedad para que no recarga directorio del script.

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

3. mostrar el archivo antes de usarlo. Dado que el archivo puede no existir la primera vez que se ejecuta la secuencia de comandos, tal vez sólo se debe attrib -h si existe.

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

4. No utilice Language_File.txt en absoluto! No veo por qué lo necesita. Sólo tiene que utilizar variables para contener el nombre del archivo de idioma. De hecho, ya tiene el nombre en %name%, ¿verdad?

En segundo lugar, se debe comprobar el valor de las variables para ver lo que realmente poseen. Cuando se carga el contenido de Language_File.txt en su variable, se ha de cargar todos los contenidos. Esto incluye la caracteres de nueva línea oculta \r\n, aunque el guión parece llevarlos a la variable como espacios. Ver:

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 echo %name% rodeada de guiones, se puede ver que hay 2 espacios después de que (presumiblemente) los caracteres de nueva línea. Para resolver este problema, puede utilizar establecido en recortar los caracteres colgados.

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-

En el segundo ejemplo, `% name% no tiene los caracteres ocultos.

Por último, sólo es necesario el uso ! a las variables de acceso que se establece dentro del bucle for. Así que todas las referencias a !name! deben ser %name% lugar. Eso es probablemente el error "no puede encontrar el archivo".

Otros consejos

Heres el archivo "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


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

Finalmente aprendió cómo formatear el fragmento de código. (aquí hay un enlace a otra copia del mismo si lo necesita.)

cómo reemplazar una cadena en la segunda línea en un archivo de texto mediante un archivo por lotes?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top