Como obtener nombres de archivos en una carpeta y agregarlos a un array | PS

Iniciado por cat26, 5 Septiembre 2019, 09:32 AM

0 Miembros y 1 Visitante están viendo este tema.

cat26

Hola, alguien me puede ayudar?
Estoy en POWERSHELL

Necesito guardar el nombre y extension de archivos alojados en una ruta especifica y que se guarden en un array para despues trabajar con esos nombres

Intente esto
Código (dos) [Seleccionar]

::obtengo el numero de archivos en la carpeta
$numero_archivos = (Get-ChildItem C:\l).Count;
::son 16 archivos asi que me devuelve 16

::creamos un array list
$array_list_nombres = New-Object System.Collections.ArrayList
::lleno el array list
for ($x=1; $x -le $numero_archivos; $x++) {
   $array_list_nombres.Add((Get-ChildItem -Path C:\l))
}
::Aqui el error: cuando obtengo el valor de cada posicion  del array list me devuelve todos los nombres que obtuvo en un solo registro
::por lo que no me sirve por que solo quiero me me devuelva el nombre de un archivo por registro de array list
:: osea asi quiero que me los llene:
::array_list_nombres[0] = archivo1.xml
::array_list_nombres[1] = archivo2.xml
::array_list_nombres[2] = archivo3.xml
:: y asi hasta llenar los 16 registros en el array, para como les comentaba usar esos nombres en otro proceso



Gracias y saludos


EdePC

Saludos,

- En PowerShell todo son objetos, y estos proveen mucha funcionalidad, supongo que tienes motivos para usar un ArrayList de .NET ...

Código (dos) [Seleccionar]
$array_list_nombres = New-Object System.Collections.ArrayList

$archivos = Get-ChildItem -Path "C:\Users\EdSon\Desktop" -File -Name

$archivos | Where-Object {$array_list_nombres.Add($_)}

Clear-Host

Write-Host $array_list_nombres[0]
Write-Host $array_list_nombres[2]
Write-Host $array_list_nombres[6]


- Jeje, me parece escuchar las quejas de PowerShell: "Somos Objetos, trátanos como tal"

- En caso de PowerShell puro basta con:

Código (dos) [Seleccionar]
Get-ChildItem -Path "C:\Users\EdSon\Desktop" -File -Name | Where-Object { Write-Host "Hola, soy: $_" }

CitarPS C:\Users\EdSon>Get-ChildItem -Path "C:\Users\EdSon\Desktop" -File -Name | Where-Object { Write-Host "Hola, soy: $_" }
Hola, soy: 2
Hola, soy: 8.jpg
Hola, soy: AnyDesk.exe
Hola, soy: cheatsheet-a5.pdf
Hola, soy: cmd_xp.exe
Hola, soy: dm
Hola, soy: dokumen.site_seguridad-informatica-enidocx.pdf
Hola, soy: e-books.lnk
Hola, soy: exiftool(-k).exe
Hola, soy: ffmpeg-GIF.cmd
Hola, soy: ffmpeg-palettegen.cmd
Hola, soy: GIF Movie Gear.lnk
Hola, soy: HTML2BBCode.html
Hola, soy: IrfanView 64.lnk
Hola, soy: jasperreports-ultimate-guide-3v2_0.pdf
Hola, soy: JS2BBCode.html
Hola, soy: pingo.exe
Hola, soy: python-3.7.4-amd64.exe
Hola, soy: python-3.7.4-embed-amd64.zip
Hola, soy: python374.chm
Hola, soy: ScreenToGif.exe
Hola, soy: Solution 5 – Check device partition and osdevice p
Hola, soy: SoulseekQt-2019-7-22-64bit.exe
Hola, soy: SplitString.java
Hola, soy: VirtualDub.lnk
Hola, soy: Windows7 Shortcuts eBook.zip

PS C:\Users\EdSon>

cat26

Muchas gracias por contestar
probé el código y me sigue repitiendo no se si es error de mi for o que, emmm o no se si no me di a entender

este es el codigo que llevo
Código (dos) [Seleccionar]

::OBTENEMOS LA CANTIDAD DE ARCHIVOS EN LA RUTA
$numero_archivos = (Get-ChildItem C:\l).Count;
::son 16 archivos asi que me devuelve 16

::DECLARAMOS EL ARRAY LIST
$array_list_nombres = New-Object System.Collections.ArrayList

::ASIGNAMOS LA RUTA A UNA VARIABLE
$archivos = Get-ChildItem -Path "C:\l" -File -Name

::GUARDAMOS EN EL ARRAY LIST
$archivos | Where-Object {$array_list_nombres.Add($_)}

::CREAMOS  UN ARAY LIST Y CREAMOS VARIABLES
$array_list_variables = New-Object System.Collections.ArrayList
for ($x=1; $x -le $numero_archivos; $x++) {
    $array_list_variables.Add("`$Ruta$x")
}
::JUNTO LOS 2 ARREGLOS
for ($n=0; $n -le ($numero_archivos -1); $n++) {
$array_list_variables[$n]+" ="+" C:/l/"+"$array_list_nombres[$x]"
}
::ME SIGUE DEVOLVIENDO TODA LA LISTA DE LOS ARCHIVOS EXISTENTES EN UN SOLO REGISTRO, COMO LO MUESTRO EN LA CAPTURA
::DE ABAJO,  PERO CUANDO LO PONGO SOLITO EN PS $array_list_nombres[0] SI ME DEVUELVE UN SOLO NOMBRE PERO CUANDO LO PONGO EN EL FOR ME SALE TODA LA LISTA


Como quiero que quede es asi: http://prntscr.com/p2h8ke
Como es que sale: http://prntscr.com/p2ha15

EdePC

- Tus Array de .NET no son Objetos de PowerShell, estos se tratan de diferente manera, por ejemplo no puedes usar comillas en ellos porque esto es propio de Objetos PowerShell:


Mal:
Citar"$array_list_nombres[$x]"

Esto me funciona a mí:
Citar# Especifico el Path
$path = "C:\Users\EdSon\Desktop\"

# OBTENEMOS LA CANTIDAD DE ARCHIVOS EN LA RUTA (-File => Solo Archivos, no carpetas)
$numero_archivos = (Get-ChildItem -Path "$path" -File).Count;

# DECLARAMOS EL ARRAY LIST
$array_list_nombres = New-Object System.Collections.ArrayList

# ASIGNAMOS LA RUTA A UNA VARIABLE
$archivos = Get-ChildItem -Path "$path" -File -Name

# GUARDAMOS EN EL ARRAY LIST
$archivos | Where-Object {$array_list_nombres.Add($_)}

# CREAMOS UN ARRAY LIST Y CREAMOS VARIABLES
$array_list_variables = New-Object System.Collections.ArrayList
for ($x=1; $x -le $numero_archivos; $x++) {
    $array_list_variables.Add("`$Ruta$x")
}
# Limpio pantalla y JUNTO LOS 2 ARREGLOS
Clear-Host
for ($n=0; $n -le ($numero_archivos -1); $n++) {
   $array_list_variables[$n] + " = " + "$path" + $array_list_nombres[$n]
}

Citar$Ruta1 = C:\Users\EdSon\Desktop\8.jpg
$Ruta2 = C:\Users\EdSon\Desktop\AnyDesk.exe
$Ruta3 = C:\Users\EdSon\Desktop\cheatsheet-a5.pdf
$Ruta4 = C:\Users\EdSon\Desktop\cmd_xp.exe
$Ruta5 = C:\Users\EdSon\Desktop\dm
$Ruta6 = C:\Users\EdSon\Desktop\dokumen.site_seguridad-informatica-enidocx.pdf
$Ruta7 = C:\Users\EdSon\Desktop\e-books.lnk
$Ruta8 = C:\Users\EdSon\Desktop\exiftool(-k).exe
$Ruta9 = C:\Users\EdSon\Desktop\FFmpeg Basics ebook.txt
$Ruta10 = C:\Users\EdSon\Desktop\FFmpeg Basics Multimedia handling with a fast audio and video encoder.pdf
$Ruta11 = C:\Users\EdSon\Desktop\ffmpeg-20190826-0821bc4-win32-static.zip
$Ruta12 = C:\Users\EdSon\Desktop\ffmpeg-20190826-0821bc4-win64-static.zip
$Ruta13 = C:\Users\EdSon\Desktop\ffmpeg-GIF.cmd
$Ruta14 = C:\Users\EdSon\Desktop\ffmpeg-palettegen.cmd
$Ruta15 = C:\Users\EdSon\Desktop\GIF Movie Gear.lnk
$Ruta16 = C:\Users\EdSon\Desktop\HTML2BBCode.html
$Ruta17 = C:\Users\EdSon\Desktop\IrfanView 64.lnk
$Ruta18 = C:\Users\EdSon\Desktop\jasperreports-ultimate-guide-3v2_0.pdf
$Ruta19 = C:\Users\EdSon\Desktop\Java_hklm.reg
$Ruta20 = C:\Users\EdSon\Desktop\JS2BBCode.html
$Ruta21 = C:\Users\EdSon\Desktop\Licensing.cnt
$Ruta22 = C:\Users\EdSon\Desktop\Manual.txt
$Ruta23 = C:\Users\EdSon\Desktop\pingo.exe
$Ruta24 = C:\Users\EdSon\Desktop\ProductLicensing.log
$Ruta25 = C:\Users\EdSon\Desktop\python-3.7.4-amd64.exe
$Ruta26 = C:\Users\EdSon\Desktop\python-3.7.4-embed-amd64.zip
$Ruta27 = C:\Users\EdSon\Desktop\python374.chm
$Ruta28 = C:\Users\EdSon\Desktop\ScreenToGif.exe
$Ruta29 = C:\Users\EdSon\Desktop\Solution 5 – Check device partition and osdevice p
$Ruta30 = C:\Users\EdSon\Desktop\SoulseekQt-2019-7-22-64bit.exe
$Ruta31 = C:\Users\EdSon\Desktop\SoulseekQt.zip
$Ruta32 = C:\Users\EdSon\Desktop\SplitString.java
$Ruta33 = C:\Users\EdSon\Desktop\SSR11-1.ABBYY [1BBE2E46].License
$Ruta34 = C:\Users\EdSon\Desktop\video.mp4
$Ruta35 = C:\Users\EdSon\Desktop\VirtualDub.lnk
$Ruta36 = C:\Users\EdSon\Desktop\Windows7 Shortcuts eBook.zip
PS C:\Users\EdSon>

cat26