基于PowerShell从指定IP远程复制文件至Windows Server 2012 R2
嘿,我来帮你搞定这个内网文件提取的需求!基于你正在使用的Windows Server 2012 R2环境,这里有两种实用的方法,能帮你根据指定IP从目标电脑固定路径复制3个同名文件到服务器指定位置,一步步来:
方法1:批处理脚本(简单直接,适合快速实现)
如果你的需求比较基础,批处理脚本是最省心的选择,不需要额外配置环境。
准备工作
- 先整理目标IP列表:创建一个名为
IPList.txt的文本文件,每行写一个目标电脑的IP,比如:192.168.1.100 192.168.1.101 192.168.1.102 - 确认好参数:你要提取的3个文件名(比如
file1.txt、file2.log、data.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
使用方法
- 右键以管理员身份打开PowerShell;
- 如果遇到脚本执行限制,先运行
Set-ExecutionPolicy RemoteSigned(按提示输入Y确认); - 切换到脚本所在目录,执行
.\ExtractFiles.ps1即可。
关键注意事项
- 权限问题:确保你的服务器账号拥有访问目标电脑共享文件夹的权限(最好是管理员权限,或者目标路径已设置共享和NTFS权限允许你的账号读取);
- 路径转换:脚本会自动把本地路径(比如
C:\SharedFiles\)转换成Windows共享路径(\\IP\C$\SharedFiles\),非系统盘也适用(比如D:\Files\会变成\\IP\D$\Files\); - 同名文件处理:脚本默认给复制后的文件名加上IP前缀,避免不同电脑的同名文件互相覆盖,如果你不需要可以删除文件名中的
$ip_`部分; - 测试优先:先找一台测试电脑,用单个IP测试脚本是否正常工作,再批量处理所有目标IP。
内容的提问来源于stack exchange,提问作者Toshi Yaoyorozu




