You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于PowerShell从指定IP远程复制文件至Windows Server 2012 R2

嘿,我来帮你搞定这个内网文件提取的需求!基于你正在使用的Windows Server 2012 R2环境,这里有两种实用的方法,能帮你根据指定IP从目标电脑固定路径复制3个同名文件到服务器指定位置,一步步来:

方法1:批处理脚本(简单直接,适合快速实现)

如果你的需求比较基础,批处理脚本是最省心的选择,不需要额外配置环境。

准备工作

  1. 先整理目标IP列表:创建一个名为IPList.txt的文本文件,每行写一个目标电脑的IP,比如:
    192.168.1.100
    192.168.1.101
    192.168.1.102
    
  2. 确认好参数:你要提取的3个文件名(比如file1.txtfile2.logdata.csv)、目标电脑的固定路径(比如C:\SharedFiles\)、服务器的目标存储路径(比如D:\ExtractedFiles\)。

编写批处理脚本

创建一个名为ExtractFiles.bat的文件,粘贴以下内容(记得替换成你实际的参数):

@echo off
setlocal enabledelayedexpansion

:: 配置你的参数
set "SOURCE_PATH=C:\SharedFiles\"
set "DEST_PATH=D:\ExtractedFiles\"
set "FILES=file1.txt file2.log data.csv"
set "IP_LIST=IPList.txt"

:: 自动创建服务器目标目录(如果不存在)
if not exist "%DEST_PATH%" mkdir "%DEST_PATH%"

:: 遍历每个目标IP
for /f "tokens=*" %%i in (%IP_LIST%) do (
    echo 正在处理IP: %%i
    :: 先检查目标电脑是否在线
    ping -n 1 %%i >nul
    if !errorlevel! equ 0 (
        :: 逐个复制指定文件
        for %%f in (%FILES%) do (
            :: 转换为Windows共享路径格式(比如\\192.168.1.100\C$\SharedFiles\file1.txt)
            set "SOURCE_FILE=\\%%i\%SOURCE_PATH:\=%\%%f"
            if exist "!SOURCE_FILE!" (
                :: 复制时给文件名加上IP前缀,避免同名文件覆盖
                copy "!SOURCE_FILE!" "%DEST_PATH%\%%i_%%f"
                echo 已完成复制: !SOURCE_FILE! → %DEST_PATH%\%%i_%%f
            ) else (
                echo 警告: %%i 上的文件 !SOURCE_FILE! 不存在
            )
        )
    ) else (
        echo 错误: 无法连接到IP %%i
    )
)

echo 所有处理已完成!
pause

使用方法

双击运行ExtractFiles.bat即可,脚本会自动遍历IP列表,完成文件复制。


方法2:PowerShell脚本(更灵活,适合复杂场景)

如果需要更细致的错误处理、日志记录,或者后续要扩展功能,PowerShell是更好的选择。

编写PowerShell脚本

创建一个名为ExtractFiles.ps1的文件,粘贴以下内容:

# 配置你的参数
$sourcePath = "C:\SharedFiles\"
$destPath = "D:\ExtractedFiles\"
$files = @("file1.txt", "file2.log", "data.csv")
$ipList = Get-Content "IPList.txt"

# 创建服务器目标目录(如果不存在)
if (-not (Test-Path -Path $destPath)) {
    New-Item -ItemType Directory -Path $destPath | Out-Null
}

# 遍历每个目标IP
foreach ($ip in $ipList) {
    Write-Host "正在处理IP: $ip" -ForegroundColor Cyan
    # 检查目标电脑是否在线
    if (Test-Connection -ComputerName $ip -Count 1 -Quiet) {
        # 转换为共享路径格式
        $sharedSourcePath = "\\$ip\$($sourcePath.Replace(':', '$'))"
        foreach ($file in $files) {
            $sourceFile = Join-Path -Path $sharedSourcePath -ChildPath $file
            if (Test-Path -Path $sourceFile) {
                $destFile = Join-Path -Path $destPath -ChildPath "$ip`_$file"
                Copy-Item -Path $sourceFile -Destination $destFile -Force
                Write-Host "已复制: $sourceFile → $destFile" -ForegroundColor Green
            } else {
                Write-Warning "IP $ip 上的文件 $sourceFile 不存在"
            }
        }
    } else {
        Write-Error "无法连接到IP: $ip"
    }
}

Write-Host "所有处理已完成!" -ForegroundColor Green

使用方法

  1. 右键以管理员身份打开PowerShell;
  2. 如果遇到脚本执行限制,先运行Set-ExecutionPolicy RemoteSigned(按提示输入Y确认);
  3. 切换到脚本所在目录,执行.\ExtractFiles.ps1即可。

关键注意事项
  • 权限问题:确保你的服务器账号拥有访问目标电脑共享文件夹的权限(最好是管理员权限,或者目标路径已设置共享和NTFS权限允许你的账号读取);
  • 路径转换:脚本会自动把本地路径(比如C:\SharedFiles\)转换成Windows共享路径(\\IP\C$\SharedFiles\),非系统盘也适用(比如D:\Files\会变成\\IP\D$\Files\);
  • 同名文件处理:脚本默认给复制后的文件名加上IP前缀,避免不同电脑的同名文件互相覆盖,如果你不需要可以删除文件名中的$ip_`部分;
  • 测试优先:先找一台测试电脑,用单个IP测试脚本是否正常工作,再批量处理所有目标IP。

内容的提问来源于stack exchange,提问作者Toshi Yaoyorozu

火山引擎 最新活动