快速便捷的将同名不同格式的文件移动到同名文件夹中。
利用 for 语句提取文件名, 并利用 md 命令新建同名文件夹, 利用 move 命令将同名不同格式移动到同名文件夹中
复制以下代码到记事本, 保存为 bat 格式。
@echo off
setlocal enabledelayedexpansion
for %%a in (*.png) do (
set "file=%%~na"
md "!file!"
move "!file:~,8!*" "!file!\"
)
pause
说明
~0 - 删除任何引号("),扩充 %0
%~f0 - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 - 仅将 %0 扩充到一个驱动器号
%~p0 - 仅将 %0 扩充到一个路径
%~n0 - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0 - 仅将 %0 扩充到一个文件扩展名
%~s0 - 扩充的路径只含有短名(“s”为Short,短的)
%~a0 - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0 - 将 %0 扩充到文件的大小(Size 大小)
%~$PATH:0 - 查找列在路径环境变量的目录,并将 %0 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串
可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,
并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
使用示例:
创建一个bat文件(expand_path.bat),内容:
@echo "%~1"
@echo "%~f1"
@echo "%~d1"
@echo "%~p1"
@echo "%~n1"
@echo "%~x1"
@echo "%~s1"
@echo "%~a1"
@echo "%~dps1%~nx1"
pause
然后使用命令
expand_path "C:/Program Files/Internet Explorer/Iexporter.exe"
得出:
"C:/Program Files/Internet Explorer/Iexporter.exe"
"C:/Program Files/Internet Explorer/Iexporter.exe"
"C:"
"/Program Files/Internet Explorer/"
"Iexporter"
".exe"
"C:/PROGRA1/INTERN1/Iexporter.exe"
""
"C:/PROGRA1/INTERN1/Iexporter.exe"
可以简单地使用这些组合来批出自己想要的一些路径。
另外一个例子:
----------------DoBind.bat------------------------------
:将当前文件夹下的所有xsd文件转换为C++代码文件
@for /r "%cd%" %%i in (*.xsd) do @echo "%%i" && @xmlbind "%%i" "%cd%"
-------------- Bindxml.bat------------------
::将参数1指定的xsd文件转换为C++代码文件
:进入参数文件所在的路径
cd "%~dps1"
%~d1
:"%~dps1%~nx1" --output-dir "%~dps1" %temp%/
:拷贝到temp后进行处理,原因是xsd不支持中文路径
copy "%1" "%temp%"
:取参数文件名的文件名,调用xsd来转换
xsd cxx-tree --generate-serialization --hxx-suffix .h --ixx-suffix .inl --cxx-suffix .cpp --generate-ostream --
generate-doxygen --generate-comparison --generate-default-ctor "%temp/%~nx1"
:copy "%temp%%~n1.h" %cd%
:copy "%temp%%~n1.cpp" %cd%