如何在JMeter中从OS Process Sampler获取重命名后的文件名?
解决JMeter中获取重命名后带时间戳文件名的问题
方法1:提前生成统一时间戳变量(最简单可靠)
在重命名操作前,先生成固定格式的时间戳变量,让重命名和上传操作复用这个变量,避免事后提取:
- 添加User Defined Variables元件,新增变量
timestamp,值设为${__time(ddMMyyyyHHmmssSS,)}(格式和你需要的2008202416202205对应) - 修改OS Process Sampler的PowerShell命令,直接用这个变量生成新文件名:
Move-Item -Path "TestFile.docx" -Destination "目标路径\TestFile_${timestamp}.docx" - HTTP请求的文件参数直接用
TestFile_${timestamp}.docx,和重命名的文件名完全一致
方法2:让PowerShell输出文件名,再用JMeter提取
如果必须在重命名时动态生成时间戳,修改PowerShell命令让它输出最终文件名,再用JMeter提取:
- 修改OS Process Sampler的Command为
powershell.exe,参数设置为:-Command "$old='TestFile.docx'; $new='TestFile_'+(Get-Date -Format 'ddMMyyyyHHmmssSS')+'.docx'; Move-Item -Path $old -Destination '目标路径\$new'; Write-Output $new" - 在OS Process Sampler后添加正则表达式提取器:
- 引用名称:
newFileName - 正则表达式:
^(.*)$ - 模板:
$1$ - 匹配数字:
1
- 引用名称:
- HTTP请求的文件参数使用
${newFileName}即可
注意事项
- 确保PowerShell命令里的文件路径、目标路径正确,路径含空格时用单引号包裹
- OS Process Sampler要勾选Capture Output,这样才能捕获PowerShell的输出内容用于提取
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

