我的文件夹名称为“223.DAT_2017010211315”。我想遍历所有文件,并将它们重命名为223_2017010211315.DAT“
我最接近这个要求如下。我可以得到文件名的第一个标记。
set "res=223.DAT_2017010211315"
for /f "tokens=1 delims=." %%i in ("%res%") do (set prefix=%%i)
echo %prefix%
pause
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
让我们从迭代文件系统开始。这应该搜索所需的文件并显示它们
for %%f in ("*.dat_*") do echo %%f
现在,一旦我们能够找到要处理的文件,我们需要分离文件的名称和扩展名。这是一项简单的任务,因为for
可替换参数(前面代码中的%%f
)允许使用一些修饰符来检索引用文件的特定信息(有关完整列表,请参阅for /?
) 。我们将使用%%~nf
(%%f
引用的文件的名称)和%%~xf
(%%f
引用的文件的扩展名)
for %%f in ("*.dat_*") do echo %%~nf %%~xf
一旦我们有了这两个元素,我们需要使用下划线作为分隔符来拆分扩展。这将给我们两个标记,下划线的左侧和右侧。为此,for /f
用于处理文件扩展名。
for /f "tokens=1,2 delims=_" %%a in ("%%~xf") do echo %%a %%b
当我们请求两个令牌时,for /f
将使用请求的可替换参数%%a
来存储第一个令牌,并将创建一个额外的可替换参数%%b
(下一个字符)到存储第二个令牌。
%%~nf %%~xf
[.][................]
223.DAT_2017010211315 = %%f
^..^ ^...........^
%%a %%b
因此,对于列表中的每个文件,执行for /f
以检索执行ren
命令所需的信息。
for %%f in ("*.dat_*") do for /f "tokens=1,2 delims=_" %%a in ("%%~xf") do (
echo ren "%%f" "%%~nf_%%b%%a"
)
请注意,对于调试purpouses,ren
命令不会执行,只会回显到控制台以检查代码行为。如果输出正确,请删除echo
并再次运行代码。
答案 1 :(得分:1)
@echo off
REM for every file matching the filter do:
for %%f in (*.dat_*) do (
REM disassemble into tree tokens, using . and _ as delimiters:
for /f "tokens=1,2,3 delims=._" %%a in ("%%~f") do (
REM re-assemble in different order:
echo %%a_%%c.%%b
)
)
答案 2 :(得分:0)
只是为了表明另一种方式:
@echo off&setlocal enabledelayedexpansion
pushd "X:\path\to\folder"
for %%A in (*.dat_*) do (
set fname=%%A
Echo ren "%%A" "!fname:.DAT=!.DAT"
)
Popd
如果输出看起来没问题,请删除回声