我有一个文件夹中的一组文件名称test! - 01.avi test! - 01.avi 。 我想为每个具有相同名称的文件创build一个新文件夹,然后将该文件移动到该文件夹中。 我拥有一切,但如何拉入“!” 并将该文件复制到该文件夹。
@ECHO OFF setlocal enabledelayedexpansion set "sourcedir=Z:\test" set folder=null set file=null PUSHD %sourcedir% FOR /f "tokens=* delims=?" %%a in ( 'dir /b /ad "*[720p].*"' ) DO ( SET file=%%a FOR /f "tokens=1,2,* delims=]-" %%b in ("%%a" "[*] * - * [720p].*" ) DO ( FOR /f "tokens=* delims= " %%e in ("%%c" ) DO ( SET folder=%%e FOR /l %%f in (1,1,31) do if "!folder:~-1!"==" " set folder=!folder:~0,-1! MD "!folder!" MOVE "!file!" .\"!folder!"\ ) ) ) POPD GOTO :EOF
谢谢参观
更好地处理文件名保持延迟扩展禁用 。 在子程序中处理(代码块)内分配的variables,如下所示:
@ECHO OFF SETLOCAL EnableExtensions DisableDelayedExpansion set "sourcedir=D:\bat\Unusual Names" PUSHD %sourcedir% dir /b /ad "*!a*.*" FOR /f "tokens=* delims=?" %%a in ( 'dir /b /ad "*!a*.*"') DO ( SET "file=%%~nxa" rem observe instructions "make a new folder for each file with the same name" rem suppose that without extension SET "folder=%%~dpna" call :DoDelayedExpansion ) POPD ENDLOCAL goto :eof :DoDelayedExpansion echo( echo MD "%folder%\" 2>NUL echo MOVE "%file%" "%folder%\" goto :eof
下一个脚本给出了一个例子,只使用我现有的testing数据集。 注意:
set "variable=value"语法用双引号转义批处理脚本中某些特殊含义的字符,例如| , & , < , >等,并确保没有(意外遗忘)尾随空白; MD和MOVE命令都只是echo ; 删除所有的echo不要比debugging。 输出 :
==>D:\bat\SF\694616.bat 01exclam!ation.txt 02exc!lam!ation.txt MD "D:\bat\Unusual Names\01exclam!ation\" MOVE "01exclam!ation.txt" "D:\bat\Unusual Names\01exclam!ation\" MD "D:\bat\Unusual Names\02exc!lam!ation\" MOVE "02exc!lam!ation.txt" "D:\bat\Unusual Names\02exc!lam!ation\" ==>
资源 (必读):
%~a等特殊页面) 命令行参数(参数)