Powershell değer bulma ve dosya oluşturma


0

Powershell'de yeniyim, yardım almayı umuyordum. Bir dosyayı arayacak ve bir dize bulabilecek ve bulunan dize değerine göre bir dosya yaratacak bir powershell komutu arıyorum.

"Abc.txt" dosyasının içinde görünen kelimelerin bir cümleyi var. App \ prog01'e giriş yaptınız . Ancak bazı durumlarda bu "abc.txt" dosyası prog21 veya prog58 gibi farklı prog ve numaralara sahip olacaktır.

Komut çalıştığında, abc.txt varsa Uygulamaya giriş \ prog58 İçinde prog58 adında basit bir dosya bulunmuyor.

Yanıtlar:


0

İhtiyacın var Select-String varsayılan olarak takma ad olan cmdlet sls. Bu cmdlet normal bir ifadeyle eşleşmenizi ve ardından eşleşen dizeyi çıkarmanızı sağlar. Tam komut bunun gibi bir şey gider:

$(sls 'Logged into app\\prog[0-9]+' 'abc.txt' -all).matches | foreach { $fn=$_.value.split('\\')[1]; [System.IO.File]::Create($fn).close(); $fn }

Temel olarak, dizenin her bir örneği için Logged into app\\progX (burada X bir veya daha fazla basamaktır) dosyada bulur, \ basamakların sonuna ulaşana kadar, bu adda bir dosya oluşturur, dosyayı yazmadan kapatır ve bu adı stdout'a ekolar (eğer isterseniz son bölümü kaldırabilirsiniz).


0

Bir PowerShell komutu istediğini biliyorum, ama önereceğim şey yeterli olabilir.

Standart bir Cmd.exe kabuğunda çalışacaktır; bu, onu PowerShell'de de çalıştırabileceğiniz ve eski Windows işletim sistemlerinde geriye dönük olarak uyumlu olacağı anlamına gelir:

TYPE abc.txt | FIND "Logged into app\prog58" >NUL && IF NOT DEFINED %ERRORLEVEL% (TYPE NUL >prog58)

Yine de soruyu yanlış anlıyor olabilirim. Tam olarak aradığın şeyin bu olup olmadığını ya da ismiyle bir dosya oluşturmak istediğini açıklayabilir misin? progXX abc.txt dosyasındaki metin ne olursa olsun?

Açıklamadan sonra düzenle: Aşağıdakiler aynı zamanda Cmd.exe uyumludur ve PowerShell'e özel değildir, bu nedenle tek astar olarak kullanılamazken, basit bir Toplu komut dosyası olarak adlandırılabilir:

@ECHO OFF
SETLOCAL && SETLOCAL EnableExtensions EnableDelayedExpansion
FOR /F "tokens=1-2 delims=\" %%A IN ('TYPE abc.txt ^| FINDSTR /C:"Logged into app\prog"') DO (SET FILENAME=%%B)
SET FILENAME=%FILENAME:~0,6%
TYPE NUL >%FILENAME%

Uyarma: bu dayanır progXX tam olarak 2 hane sahip progXXX işe yaramazdı.


Evet, abc.txt dosyasındakilere göre progXX adında bir dosya oluşturmaya çalışıyorum.
user4618954

@ user4618954 - Açıklamanızı yansıtmak için cevabımı güncelledim. PowerShell'e özel olmasa da, komut dosyası biçiminde .bat / .cmd / .ps1 vb. Gibi düzgün çalışacaktır.
rubynorails
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.