2012-08-22 19 views
8

tengo la siguiente cadena dentro de mi archivo por lotes de Windows:Retire primero y el último carácter de una cadena en un archivo por lotes de Windows

"-String" 

La cadena también contiene las comillas twoe al principio y al final de la cuerda, tal como está escrito arriba.

que se quieren eliminar los caracteres primero y último de manera que llegue la siguiente cadena:

-String 

He intentado esto:

set currentParameter="-String" 
echo %currentParameter:~1,-1% 

Esto imprime la cadena de como debe ser:

-String 

Pero cuando intento para almacenar la cadena editada como esta, se produce un error:

set currentParameter="-String" 
set currentParameter=%currentParameter:~1,-1% 
echo %currentParameter% 

No se imprime nada. ¿Qué hago mal?


Esto realmente es extraño. Cuando quito los personajes como esto funciona:

set currentParameter="-String" 
set currentParameter=%currentParameter:~1,-1% 
echo %currentParameter% 

imprime:

-String 

Pero en realidad mi lote es un poco más complicado y hay no funciona. Voy a mostrar lo programé:

@echo off 

set string="-String","-String2" 

Set count=0 
For %%j in (%string%) Do Set /A count+=1 


FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo . 
     call :myFunc %%H 
) 
exit /b 

:myFunc 
FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (

    echo String WITHOUT stripping characters: %%I 
    set currentParameter=%%I 
    set currentParameter=%currentParameter:~1,-1% 

    echo String WITH stripping characters: %currentParameter% 

    echo . 

) 
exit /b 

:end 

y la salida es:

. 
String WITHOUT stripping characters: "-String" 
String WITH stripping characters: 
. 
. 
String WITHOUT stripping characters: "-String2" 
String WITH stripping characters: ~1,-1 
. 

Pero lo que yo quiero es:

. 
String WITHOUT stripping characters: "-String" 
String WITH stripping characters: -String 
. 
. 
String WITHOUT stripping characters: "-String2" 
String WITH stripping characters: -String2 
. 
+0

Sus obras de la muestra (como se esperaba), tiene que haber otro error . Tal vez has intentado esto dentro de un bloque? – jeb

+0

Aparece el siguiente mensaje: 'ECHO ist ausgeschaltet (OFF). ~ 1, -1' – Metalhead89

+0

Quizás sea porque está en una función? ': myFunc para "tokens =% 1 delims ="/ F %% I EN ("% processChain1%") Do ( \t conjunto currentParameter = %% I \t conjunto currentParameter =% currentParameter: 1 ~ , -1% \t echo% currentParameter% \t rem java -jar app.jar %% I ) salida/b' – Metalhead89

Respuesta

4

Te modyfing una variable dentro de un bloque entre paréntesis. Tenga cuidado: el nuevo valor no se usará dentro del mismo bloque (a menos que delimite la variable con! En lugar de%) y se ejecute en el modo enabledelayedexpansion). O simplemente extraer el par de líneas en otro sub-función, usando una secuencia normal de las líneas de insted()

saluda, Stach

4

esperanza le ayudará. Cadena de eco sin eliminar caracteres: %% I

set currentParameter=%%I 
set currentParameter=!currentParameter:~1,-1! 

echo String WITH stripping characters: !currentParameter! 

echo . 

que podría funcionar. Prueba esto una vez.

2

Este script aprovecha ENABLEDELAYEDEXPANSION. Si no sabe, las secuencias de comandos por lotes ejecutan comandos para y si todo en uno; por lo tanto, si lo hace:

if true==true (
@echo off 
set testvalue=123 
echo %testvalue% 
pause >NUL 
) 

usted no nada de salida, porque cuando echo% TestValue% se ejecuta, no ha reconocido la TestValue ha cambiado. El uso de delayedexapnsion permite que el script lea ese valor tal como está ahora y olvide el problema que mencioné anteriormente. Lo usa igual que% testvalue%, pero puede hacerlo! Testvalue! para solucionar este problema:

if true==true (
@echo off 
set testvalue=123 
echo !testvalue! 
pause >NUL 
) 
  • volvería a repetir 123.

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
set string="-String","-String2" 
Set count=0 

For %%j in (%string%) Do Set /A count+=1 

FOR /L %%H IN (1,1,%COUNT%) DO ( 
echo . 
call :myFunc %%H 
) 

exit /b 
:myFunc 

FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (
echo String WITHOUT stripping characters: %%I 
set currentParameter=%%I 
set currentParameter=!currentParameter:~1,-1! 
echo String WITH stripping characters: !currentParameter! 
echo . 
) 

exit /b 
:end 

~ Alex

Cuestiones relacionadas