如何在批处理文件中交换包含连字符 (-) 的文件名? abc-def 到 def-abc
How to swap file names that contain a hyphen (-) in a batch file? abc-def to def-abc
我使用 ffmpeg 批量反转视频文件。
我现在想做的是:
- 仅反转名称中带有“-”的文件。
- 通过将“-”之前的部分与之后的部分交换来重命名这些文件。就像“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
,并且文件名有前导或尾随空格可能会给你带来未来的问题。
我使用 ffmpeg 批量反转视频文件。
我现在想做的是:
- 仅反转名称中带有“-”的文件。
- 通过将“-”之前的部分与之后的部分交换来重命名这些文件。就像“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
,并且文件名有前导或尾随空格可能会给你带来未来的问题。