2011-03-05 83 views
8

Ok, así que esto es lo que estoy tratando de hacer: Quiero hacer un pequeño script de powershell que toma cada archivo de mi biblioteca de música y luego hace una suma hash de y lo escribe en un archivo como el siguiente:Cortar texto en cadena después/antes del separador en powershell

test.txt; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198

Ahora cuando empiezo el guión necesito primero comparar mi biblioteca de música con los valores ya existentes, pero para esto solo quiero cortar todo después de la ; para que pueda comparar nombre de archivo contra nombre de archivo (o ruta de archivo) ... pero estoy perplejo sobre cómo hacerlo, intenté reemplazarlo por $ name = $ name -replace "; *", "" no go ...

trataron de filtrar ... no saben cómo D:

Te lo agradecería ayuda.

Además, si usted piensa que estoy useing el lenguaje de codificación mal, me dicen y lo que sería mejor, es sólo tan sólo C utilizado alguna vez y PowerShell

Respuesta

32
$pos = $name.IndexOf(";") 
$leftPart = $name.Substring(0, $pos) 
$rightPart = $name.Substring($pos+1) 

Internamente, PowerShell utiliza el String class.

+0

bien mire que las respuestas ya están aquí y funciona como un encanto, muchas gracias – DemonWareXT

+0

Funcionó como el encanto. Gracias VVS –

1

Esto funciona para un delimitador específico para una cantidad específica de caracteres entre el delimitador. Tuve muchos problemas al tratar de usar esto en a para cada ciclo donde la posición cambiaba pero el delimitador era el mismo. Por ejemplo, estaba usando la barra diagonal inversa como delimitador y solo quería usar todo a la derecha de la barra invertida. El problema era que una vez que se definió la posición (71 caracteres desde el principio) usaría $ pos como 71 cada vez independientemente de dónde estaba realmente el delimitador en el script. Encontré otro método para usar un delimitador y .split para separar cosas y luego usé la variable dividida para llamar a las secciones. Por ejemplo, la primera sección era $ variable [0] y la segunda sección era $ variable [1].

2

Se puede utilizar un Split:

$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198" 
$separator = ";" # you can put many separator like this "; : ," 

$parts = $text.split($separator) 

echo $parts[0] # return test.txt 
echo $parts[1] # return the part after the separator 
4
$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198" 

$text.split(';')[1].split(' ') 
0

que tenían un completo directorio de archivos, incluyendo algunas que fueron nombrados factura no.pdf ningún subproducto y queremos ordenar éstos por productos no, entonces ...

get-childitem * .pdf | sort-object -property @ {expression = {$ _. name.substring ($ _. name.indexof ("-") + 1)}}

Tenga en cuenta que en ausencia de un '-' esto se ordena $ _. nombre