Perlu loop untuk nama komputer di share

Saya memiliki .bat yang memalukan ini:

pushd \\computer00081\d    
rmdir "z:\dig_dok" /s /q   
mkdir . "dig_doc"   
cd dig_doc  
xcopy "C:\Users\myUser\Desktop\dig_doc" .\ /E  
C:  
net use z: /delete /y

Nama komputer di jaringan saya memiliki pola nama yang sama: computer00081, computer00082, computer00083... dan seterusnya. Mereka memiliki struktur file/folder yang sama di d share. Bagaimana cara membuat loop untuk nama komputer dari katakanlah komputer00001 ke komputer00200 dan melakukan hal yang sama untuk semuanya? Mungkin melakukannya untuk daftar computer.txt? Atau ulangi dari file host. Terima kasih sebelumnya! Kamu keren!


person Sv3n    schedule 15.06.2021    source sumber


Jawaban (2)


Meskipun ini bisa berupa kubah di cmd, namun jauh lebih mudah di powershell. Loop for mengontrol nomor sistem; dari 1 hingga 9 dalam kasus ini. Ubah itu menjadi apa pun yang Anda butuhkan. Bila Anda puas dengan apa yang akan dilakukan, hapus -WhatIf dari perintah Remove-Item dan `Salin-Item.

=== Lakukan-CopyStuff.ps1

$DupDir = 'dig_doc'
$SourceDir = Join-Path -Path (Join-Path -Path $Env:USERPROFILE -ChildPath 'Desktop') -ChildPath $DupDir
$SHARENAME = 'D'
for ($i = 1; $i -lt 10; $i++) {
    $DestinationDir = '\\COMPUTER' + '{0:d5}' -f @($i) + "\$SHARENAME"
    if (Test-Path -Path $DestinationDir) {
        Remove-Item -Recurse -Force -Path $DestinationDir -WhatIf
        Copy-Item -Recurse -Path $SourceDir -Destination $DestinationDir -WhatIf
    }
}

Jika Anda harus menjalankan ini dari cmd.exe, ini dapat digunakan.

powershell -NoLogo -NoProfile -File ".\Do-CopyStuff.ps1"
person lit    schedule 15.06.2021
comment
Yo! s#!tmu benar-benar menyala! Persis apa yang saya butuhkan. Saya melakukan \$SHARENAME\$DupDir untuk $DestinationDir dan membuat $PushdDir = '\\COMPUTER' + '{0:d5}' -f @($i) + \$SHARENAME sehingga saya dapat menjalankan if ( Test-Path -Path $PushdDir) { pushd $PushdDir} untuk mendorong pembagian terlebih dahulu jika tidak maka lokasi jaringan seperti itu tidak akan ditemukan tidak dipetakan. Tapi, hei, kamu sangat membantu. Anda adalah tuhan pribadi saya sekarang! /busur - person Sv3n; 16.06.2021
comment
Di PowerShell, pushd adalah Push-Location. Tapi, menurutku kamu tidak membutuhkannya. Direktori dapat direferensikan melalui jalur UNC. Selain itu, Push-Location tidak memetakan huruf drive. Di cmd, Anda tidak dapat berasumsi bahwa pushd dipetakan ke Z:. Tidak diperlukan huruf drive untuk melakukan ini. - person lit; 16.06.2021

Lihat jawaban ini: https://stackoverflow.com/a/8086103/8954127

Sepertinya variabel string secara alami dapat diubah dalam cmd jika ada pembatas umum yang tersedia (seperti ,). Jika Anda dapat membuat string nama komputer yang dipisahkan koma, Anda dapat mengulanginya dengan mengeksekusinya di setiap host.

Jawaban ini tidak lengkap tetapi menurut saya ini akan memacu Anda ke arah yang benar.

set "compnames="

:: needs extra logic to pad missing leading zeros
for /L %%i in (1,1,20) do call set "compnames=%compnames%,computername00%%i"

:: logic to remove any leading comma or space

for %%i in ( %compnames% ) do (
    :: do work with each computer name
    echo %%i
)

Beberapa referensi lagi:

person Grant Lindsey    schedule 15.06.2021