我有一个包含各种文件的目录,其中一些文件名有用连字符/破折号分隔的子部分,例如foo-bar.pdf
不幸的是,这似乎混淆了 Windows 10 资源管理器的搜索。例如,搜索字符串name:(foo bar)
似乎找不到名为的文件,foo-bar.pdf
但是,如果我用下划线将其重命名为,它确实会找到相同的文件foo_bar.pdf
(如果有人看到不同的行为,我很想知道!)
因此,我想将所有带有破折号/连字符的文件重命名为下划线。有什么好方法可以先筛选出此类文件列表,然后再重命名它们?
例如在 Linux 中我会使用 Regex 等编写一个 shell 脚本或一个行程序mv, grep sed, awk
。
在 Windows 上有没有什么快捷的方法可以做到这一点?
答案1
对于 cmd/命令行使用ren/rename
循环for
和子字符串替换variable:-=_"
:
// in bat ::
for %%i in (*-*.*)do set "_name=%%~ni" && cmd/v/c "ren "%%~i" "!_name:-=_!%%~xi""
// in cmd command line ::
for %i in (*-*.*)do set "_name=%~ni" && cmd/v/c "ren "%~i" "!_name:-=_!%~xi""
// in PowerShell ::
ls *.pdf| ren -new {$_.basename.replace('-','_')+$_.extension}
答案2
1.使用 Poweshell
您可以尝试在 Powershell 中使用以下命令:
dir | Rename-Item -NewName {$_.Name -Replace '-','_'}
它列出目录中的文件,然后通过替换-
来重命名文件_
。
2. 使用 PowerRename
您也可以使用随附的 PowerRename 进行操作动力玩具. 打开 PowerToys 设置,确保 PowerRename 已启用并集成到 shell。
选择文件,右键单击并单击 PowerRename。将显示一个窗口。输入要搜索的条件-
和要替换的字符串-
。或者,选择使用正则表达式。预览将显示文件的新名称。单击确定以重命名它们。
答案3
因为搜索如何在 Linux 中执行此操作将我带到了这个页面,所以我将把这个页面留在这里,以便遇到同样情况的人可以参考。
for f in *.py; do mv "$f" "${f//-/_}"; done