WinSCP批量脚本上传文件后如何修改本地文件扩展名?
WinSCP上传后批量修改本地文件扩展名的解决方案
问题根源
你脚本里的!ren *.txt *.csv是本地命令,本来该修改本地文件,但可能是因为-latest参数仅上传单个最新文件,或者你之前没加!导致误操作远程文件——记住:WinSCP里带!的命令是本地系统命令,不带!的才是远程操作。
正确脚本(精准重命名已上传文件)
如果要上传所有未处理的.txt文件,且只将已上传成功的文件改为.csv,使用以下脚本:
lcd C:\Files cd /directory # 上传所有本地.txt文件,成功后逐个重命名对应文件 put -filemask="*.txt" -nopreservetime * !ren "!^!" "!^:name!.csv" exit
关键说明
put -filemask="*.txt" -nopreservetime *:一次性上传本地目录下所有.txt文件,-nopreservetime避免远程文件时间覆盖本地文件时间!ren "!^!" "!^:name!.csv":这是WinSCP的批量后处理语法,!^!指代刚上传的每个本地文件路径,!^:name!提取文件主名称(不含扩展名),确保仅重命名已成功上传的文件,不会误改未上传的.txt
进阶:仅上传新生成的文件
如果不想靠扩展名区分,想按文件生成时间筛选上传(比如仅传24小时内的新文件),修改-filemask参数即可:
lcd C:\Files cd /directory # 上传最近1天生成的.txt文件,上传后重命名 put -filemask="*.txt>=1D" -nopreservetime * !ren "!^!" "!^:name!.csv" exit
>=1D代表最近1天,也可以替换为具体日期(如>=2024-05-20)来指定时间范围
测试小技巧
担心误操作的话,给put命令添加-dryrun参数,模拟上传和重命名流程,不会实际修改文件:
put -dryrun -filemask="*.txt" -nopreservetime * !ren "!^!" "!^:name!.csv"
内容的提问来源于stack exchange,提问作者Spike
相关产品推荐
相关产品推荐

