如何在批处理脚本中将文件名拆分为完整路径?
答案 0 :(得分:67)
@echo off
Set filename=C:\Documents and Settings\All Users\Desktop\Dostips.cmd
For %%A in ("%filename%") do (
Set Folder=%%~dpA
Set Name=%%~nxA
)
echo.Folder is: %Folder%
echo.Name is: %Name%
但我不能因此而受到赞扬; Google在http://www.dostips.com/forum/viewtopic.php?f=3&t=409
发现了此消息答案 1 :(得分:19)
将完全限定路径名(例如c:\ temp \ my.bat)中的文件名解析为任何组件(例如,File.ext)。
单行代码:
new Color(0.0, 0.0, 0.0)
您可以更改" C:\ Folder1 \ Folder2 \ File.ext "任何完整的路径和变化" %% ~fA "对于任何其他选项,您可以通过运行" for /?"在命令提示符下。
详细说明的代码
For %%A in ("C:\Folder1\Folder2\File.ext") do (echo %%~fA)
独立批处理脚本
另存为 C:\ cmd \ ParseFn.cmd 。
将 C:\ cmd 添加到 PATH 环境变量中,并使用它来存储所有可重用的批处理脚本。
set "filename=C:\Folder1\Folder2\File.ext"
For %%A in ("%filename%") do (
echo full path: %%~fA
echo directory: %%~dA
echo path: %%~pA
echo file name only: %%~nA
echo extension only: %%~xA
echo expanded path with short names: %%~sA
echo attributes: %%~aA
echo date and time: %%~tA
echo size: %%~zA
echo drive + path: %%~dpA
echo name.ext: %%~nxA
echo full path + short name: %%~fsA)
答案 2 :(得分:6)
@echo off
Set filename="C:\Documents and Settings\All Users\Desktop\Dostips.cmd"
call :expand %filename%
:expand
set filename=%~nx1
echo The name of the file is %filename%
set folder=%~dp1
echo It's path is %folder%
答案 3 :(得分:0)
我对批处理文件的了解不多,但你不能将预先制作的批处理文件从主目录复制到你所拥有的路径,它会返回文件名列表然后使用该名称?
这是一个我认为可能有助于制作预制批处理文件的链接。
答案 4 :(得分:0)
继续上面的Pete示例,要直接在cmd窗口中执行此操作,请使用单个%
,例如:
cd c:\test\folder A
for %X in (*)do echo %~nxX
(请注意,desktop.ini等特殊文件不会显示。)
还可以使用>>
将输出重定向到文件:
cd c:\test\folder A
for %X in (*)do echo %~nxX>>c:\test\output.txt
举个实例,假设您要将所有文件从文件夹A复制到文件夹-B(非递归):
cd c:\test\folder A for %X in (*)do robocopy . "c:\test\folder B" "%~nxX" /dcopy:dat /copyall /v>>c:\test\output.txt
以及所有文件夹(递归):
cd c:\test\folder A for /d %X in (*)do robocopy "%X" "C:\test\folder B\%X" /e /copyall /dcopy:dat /v>>c:\test\output2.txt