ต้องการวนซ้ำชื่อคอมพิวเตอร์ในการแชร์

ฉันมี .bat ที่น่าอายนี้:

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

ชื่อคอมพิวเตอร์บนเครือข่ายของฉันมีรูปแบบชื่อเดียวกัน: คอมพิวเตอร์00081, คอมพิวเตอร์00082, คอมพิวเตอร์00083... และอื่นๆ พวกเขามีโครงสร้างไฟล์/โฟลเดอร์เดียวกันในการแชร์ d ฉันจะสร้างลูปสำหรับชื่อคอมพิวเตอร์จากคอมพิวเตอร์ 00001 ถึงคอมพิวเตอร์ 00200 และทำเช่นเดียวกันกับชื่อทั้งหมดได้อย่างไร อาจจะทำเพื่อรายการcomputers.txt? หรือวนซ้ำจากไฟล์โฮสต์ ขอบคุณล่วงหน้า! คุณร็อค!


person Sv3n    schedule 15.06.2021    source แหล่งที่มา


คำตอบ (2)


แม้ว่าสิ่งนี้สามารถเป็นโดมได้ใน cmd แต่จะง่ายกว่ามากใน powershell for ลูปควบคุมหมายเลขระบบ จาก 1 ถึง 9 ในกรณีนี้ เปลี่ยนเป็นสิ่งที่คุณต้องการ เมื่อคุณพอใจกับสิ่งที่จะทำ ให้ลบ -WhatIf ออกจากคำสั่ง Remove-Item และ `Copy-Item

=== ทำ 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
    }
}

หากคุณต้องรันสิ่งนี้ตั้งแต่ cmd.exe ก็สามารถใช้ได้

powershell -NoLogo -NoProfile -File ".\Do-CopyStuff.ps1"
person lit    schedule 15.06.2021
comment
โย่! คุณ #!t เป็นครอบครัวที่สดใสจริงๆ! สิ่งที่ฉันต้องการ ฉันทำ \$SHARENAME\$DupDir สำหรับ $DestinationDir และสร้าง $PushdDir = '\\COMPUTER' + '{0:d5}' -f @($i) + \$SHARENAME เพื่อให้ฉันสามารถเรียกใช้อันอื่นได้ถ้า ( Test-Path -Path $PushdDir) { pushd $PushdDir} เพื่อพุชการแชร์ก่อน ไม่เช่นนั้นจะไม่พบตำแหน่งเครือข่ายที่ไม่ได้รับการแมป แต่เดี๋ยวก่อนคุณช่วยได้มาก ตอนนี้คุณเป็นพระเจ้าส่วนตัวของฉันแล้ว! /โค้งคำนับ - person Sv3n; 16.06.2021
comment
ใน PowerShell pushd คือ Push-Location แต่ฉันไม่คิดว่าคุณต้องการมัน ไดเรกทอรีสามารถอ้างอิงได้โดยเส้นทาง UNC นอกจากนี้ Push-Location จะไม่แมปอักษรระบุไดรฟ์ ใน cmd คุณไม่สามารถสันนิษฐานได้ว่า pushd แมปกับ Z: ไม่จำเป็นต้องมีอักษรระบุไดรฟ์ในการดำเนินการนี้ - person lit; 16.06.2021

ลองดูคำตอบนี้: https://stackoverflow.com/a/8086103/8954127

ดูเหมือนว่าตัวแปรสตริงจะสามารถทำซ้ำได้ตามธรรมชาติใน cmd หากมีตัวคั่นทั่วไป (เช่น ,) หากคุณสามารถสร้างสตริงที่คั่นด้วยเครื่องหมายจุลภาคของชื่อคอมพิวเตอร์ได้ คุณสามารถวนซ้ำชื่อคอมพิวเตอร์แต่ละเครื่องได้

คำตอบนี้ไม่สมบูรณ์ แต่ฉันคิดว่านี่ควรกระตุ้นคุณไปในทิศทางที่ถูกต้อง

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
)

ข้อมูลอ้างอิงเพิ่มเติมบางส่วน:

person Grant Lindsey    schedule 15.06.2021