![如何使用批处理文件从路径和文件名返回文件的名称](https://linux22.com/image/1597363/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%BB%8E%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D%E8%BF%94%E5%9B%9E%E6%96%87%E4%BB%B6%E7%9A%84%E5%90%8D%E7%A7%B0.png)
我正在尝试运行一个脚本,该脚本部分设置了一个名为“name”的变量,使其仅是地址字段中的文件名称。永远只有一个文件,并且它始终位于同一位置,但文件的名称会发生变化。我尝试了以下操作:
for /f "delims=" %%G in ('dir /b \\sshserver\SFTP\incoming\Trade Capture Data\Import\Auction Volumes\Auction Volumes*.csv') do @set name=%%G
echo %name%
和
for /r %%f in (\\sshserver\SFTP\incoming\Trade Capture Data\Import\Auction Volumes\Auction Volumes*.csv) do @set name=%%~nf
echo %name%
文件的位置始终为 \sshserver\SFTP\incoming\Trade Capture Data\Import\Auction Volumes\,文件名始终以“Auction Volumes”开头
我是 CMD 编程的新手,很难理解 FOR 命令。我浏览了大量帖子,但似乎还是无法找到最好的方法来实现这一点!
请帮忙!
谢谢
答案1
我会为此使用 forfiles,因为它可以满足您的所有要求。
请注意,forfiles 不支持 UNC 路径,因此您必须先映射网络驱动器。
该脚本看起来是这样的:
@echo off
:: -- Navigate to the UNC using spare driveletter
pushd "\\sshserver\SFTP\incoming\Trade Capture Data\Import\Auction Volumes\"
:: -- get filename and store in variable
forfiles /m "Auction Volumes*.csv" /C "cmd /k set name=@file"
:: -- Return to local path and remove temp driveletter
popd
:: -- show result
echo %name%