如何在批处理文件中交换包含连字符 (-) 的文件名? abc-def 到 def-abc

How to swap file names that contain a hyphen (-) in a batch file? abc-def to def-abc

我使用 ffmpeg 批量反转视频文件。

我现在想做的是:

  1. 仅反转名称中带有“-”的文件。
  2. 通过将“-”之前的部分与之后的部分交换来重命名这些文件。就像“abc-def”变成了“def-abc”。

有什么想法吗?

谢谢!

更新:

我现在尝试了以下方法来查找文件。由于某种原因,它总是成功,无论哪个名称:

for %%a in ("videos/*.mp4") do (
    echo %%a|find "-" >nul
    if %errorlevel%==0 (
        echo found
    )
)

如果您的文件名不包含感叹号 (!),那么这样的内容可能适合您:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In (
    '"(Set PATHEXT=) & "%SystemRoot%\System32\where.exe" /F "Videos":"*-*.mp4" 2> NUL"'
) Do Call :Sub %%G
GoTo :EOF

:Sub
Set "FN=%~n1"
SetLocal EnableDelayedExpansion
Set "RS="
Set "FS=%FN:-=" & Set "RS=-!FS!!RS!" & Set "FS=%"
EndLocal & Ren %1 "%FS%%RS%%~x1"
Exit /B

请注意,没有对有问题的结果文件名进行检查,因此如果您有 Videos\foo - bar.mp4,结果重命名将是 Videos\ bar-foo .mp4,并且文件名有前导或尾随空格可能会给你带来未来的问题。