批处理文件中如何仅获取文件夹名称而非完整目录?
问题
我有一个用于7zip压缩文件的批处理文件,当电脑内存不足或因其他原因失败时,它会自动降低压缩设置。我将文件夹拖拽到该批处理文件上,它会在待压缩文件夹的根目录生成压缩包。
示例:待压缩文件夹路径为Z:\Test\Example Folder。
使用以下代码时:
for %%x in (%*) do ( Rem // Use Current Argument To set File, Folder, and Archive Paths Set filePath="%%~x" Set directoryFiles="%%~x\*" Set archivePath="%%~x.7z" )
生成的7zip文件位于待压缩文件夹的根目录,即Z:\Test\Example Folder.7z。
若使用以下代码:
for %%x in (%*) do ( Rem // Use Current Argument To set File, Folder, and Archive Paths Set filePath="%%~x" Set directoryFiles="%%~x\*" Set archivePath="C:\Users\Dr4gon\Downloads\Compressed\NEW.7z" )
生成的7zip文件为C:\Users\Dr4gon\Downloads\Compressed\NEW.7z。
我尝试修改为C:\Users\Dr4gon\Downloads\Compressed\%%~x.7z但失败了,推测是因为%%~x代表的是完整路径Z:\Test\Example Folder而非仅文件夹名称Example Folder。
请问需要使用什么代码才能让7zip文件保存为C:\Users\Dr4gon\Downloads\Compressed\Example Folder.7z?
做出此修改的主要原因是,有时我需要压缩网络上的文件夹,同时写入网络驱动器速度过慢且有时会失败。我希望能设置一个默认目录,提升跨驱动器使用7zip压缩的速度。
解决方案
在批处理中,使用%%~nx可以获取拖拽文件夹的纯名称(不含完整路径),替换原来的%%~x即可实现需求。修改后的代码如下:
for %%x in (%*) do ( Rem // Use Current Argument To set File, Folder, and Archive Paths Set filePath="%%~x" Set directoryFiles="%%~x\*" Set archivePath="C:\Users\Dr4gon\Downloads\Compressed\%%~nx.7z" )
参数说明
%%~x:代表完整的文件夹路径(如Z:\Test\Example Folder)%%~nx:仅提取路径中的文件夹名称(如Example Folder)
这样修改后,压缩包会自动以原文件夹名称命名,并保存到指定的本地目录下,避免写入网络驱动器的速度问题。
内容的提问来源于stack exchange,提问作者DR4GON
相关产品推荐
相关产品推荐

