Bir CMD komutunun çıktısını alın ve bir toplu iş değişkenine ayarlayın


6

Grupların adını almak için bu komutu çalıştırıyorum:

set "remotegroup="
     for /f "skip=1delims=" %%a in (
     '"wmic group where sid="S-1-5-32-555" get name"'
     ) do if not defined remotegroup set "remotegroup=%%a"

ama bunu yaptığımda echo "%rdpgroup%"çıktı şöyle olur:

"Remote Desktop Users  "

Kullanıcıların sonunda bu boşlukları istemiyorum. Sadece şöyle bir çıktı istiyorum:"Remote Desktop Users"


Geçmişte de benzer bir hata yaşadım, tam olarak hatırlayamıyorum, ancak betiğimdeki rasgele boşlukları kaldırarak çözüldüğünü düşünüyorum. Nedense cmd gereksiz boşluklar ekliyordu çünkü senaryomda başka bir yerde boşluk var. Kesinlikle gerekli olmayan tüm alanları kaldırmayı deneyin. Kulağa rastgele geldiğini biliyorum, ama benim durumumda işe yaradı.
IronWilliamCash

@IronWilliamCash tam olarak bu boşlukları kaldırmak için neye ihtiyacım olduğunu. Nasıl bilmiyorum.
Aria Fathi

İstenmeyen boşlukları bu komut biçimi ile kaldırabilirsiniz, sadece komut dosyasının uygun bölümüne ekleyin: set "rdpgroup =! Rdpgroup: =!" (iki boşluğu tek bir boşluğa dönüştürür, ancak örneğin 4 boşluğu tek bir boşluğa veya 3 boşluğu boşluğa dönüştürmeden değiştirebilirsiniz - birçok olasılık vardır).
Ed999

Yanıtlar:


7

WMIC'in çıkışı unicode'dur!

Sondaki <CR>değer, başka bir FOR / F döngüsünden geçirilerek kaldırılabilir. Bu, hayalet "boş" satırı da kaldırır (aslında a <CR>)

@echo off
set "remotegroup="
for /f "skip=1 delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name"') do (
    for /f "delims=" %%b in ("%%a") do if not defined remotegroup set "remotegroup=%%~nb"
)
echo "%remotegroup%"
pause

0

Aynı sonuçları almanın farklı yolları ThunderJun tarafından:

OP1: Burada gecikmiş tipte (! Var!) Özel değişkenlerin kullanımını aktif hale getirmek için setlocal kullanıyoruz. Aynı sonucu almak için.

OP2: Komutu ortak tip bir değişkene atarız ve düşey çubuk yardımıyla her zaman önce önceliğe sahip olan birkaç komutu birleştiririz. Filtreyi ekleriz: ilk çıkış satırını yoksaymayı belirtmek için daha fazla +1 ve sonra süzgeci ekleriz: findstr / i "remot" başka bir dikey çubukla Tırnak işaretleri ve büyük veya küçük harfler arasında ayrım yapmaz. Daha sonra, son 3 karakteri göstermemeyi gösteren genel bir tür değişkeni kullanıyoruz:% var: ~ 0, -3% Bu şekilde, for için bir başkasını kullanmadan aynı sonucu elde ederiz.

OP3: Burada, gecikmeli türdeki (! Var!) Özel değişkenlerin kullanımını etkinleştirmek için setlocal kullanıyoruz. Dikey bir çubukla, komutun sonunda for için. Bunun için şu komutu içeren bir filtre atarız: findstr / i "remot", yalnızca anahtar sözcükle satırları tırnak içinde yazdığını ve büyük ve küçük harfler arasında ayrım olmadığını belirtir. Komut çıktısını yakalamak için gecikmeli tipte özel bir değişken kullanıyoruz ve hiçbirinin yerine 2 karakteri boş bıraktık.

@echo off

:::::::::::::OP1 START. BY ThunderJun
setlocal enabledelayedexpansion
set remotegroup=
for /f "skip=1 delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name"') do (
set remotegroup=%%a!remotegroup:~0,-4!
set rio=!remotegroup:~0,-1!
set remotegroup=!rio:~0,-1!
)
echo  OP1 "%remotegroup%"
:::::::::::::OP1 END

:::::::::::::OP2 START. BY ThunderJun
set a='"wmic group where sid="S-1-5-32-555" get name |more +1 |findstr /i "remot""'
for /f "delims=" %%c in (%a%) do (set remotegroup=%%c)
echo  OP2 "%remotegroup:~0,-3%"
:::::::::::::OP2 END

:::::::::::::OP3 START. BY ThunderJun
setlocal enabledelayedexpansion
set remotegroup=
for /f "delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name |findstr "remot""') do (
    set remotegroup=%%~na& set remotegroup=!remotegroup:  =!)
echo  OP3 "%remotegroup%"
:::::::::::::OP4 END


pause

Eğer sadece Hackoo’nun cevabından alıntı yapıyorsanız lütfen bunu yapmayın. Geliştirilmiş bir sürüm sunuyorsanız, lütfen neyi değiştirdiğinizi belirtin.
Scott

Tamam arkadaş, öneri için teşekkürler
ThunderJun
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.