Sha*_*dow 16 windows cmd renaming
我正在尝试更改当前文件夹中的所有文件名,我试图通过删除文件前缀(每个文件都有一个公共前缀)或将其名称更改为其计数(如果有5个文件,文件名)来实现此目的将是1.txt 2.txt 3.txt 4.txt 5.txt).
现在我已经在cmd中找到了ren命令并且稍微玩了一下但到目前为止我无法实现结果而且我只能在cmd中运行它,所以不能使用批处理文件.
这是我得到的最接近的,但它只添加了一个前缀:
FOR %f IN (*.*) DO ren %f prefix%f
Run Code Online (Sandbox Code Playgroud)
我尝试过相反的做法:
FOR %f IN (*.*) DO ren prefix%f %f
Run Code Online (Sandbox Code Playgroud)
但是,当然,没有工作,所以我现在寻求帮助和一些解释,如果可能的话(我想了解这些事情是如何工作的).在此先感谢您的帮助.
小智 34
https://superuser.com/a/871799/497147中提供了一种更简单的解决方案
我在这里复制它以便于访问.
忘掉复杂的脚本吧.
rename是一个非常古老而且从未正确完成的命令.如果您没有正确使用它,结果可能会让您感到惊讶.例如删除前缀
abcd从abcd1.txt,abcd2.txt,abcd3.txt等为了得到1.txt,2.txt,3.txt只需使用Run Code Online (Sandbox Code Playgroud)rename "abcd*.txt" "////*.txt"您需要与
/要删除的初始字符数相同的数量.请为两个参数放置双引号.
dbe*_*ham 30
我不明白为什么你不能使用批处理文件.但这是一个适用于大多数文件名的解决方案.
关键 - 首先你必须确保你有一个未定义的变量名,我将使用fname
set "fname="
Run Code Online (Sandbox Code Playgroud)
接下来是实际重命名的命令.如果已经定义了fname,它将无法正常工作.
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
Run Code Online (Sandbox Code Playgroud)
为每次迭代定义fname变量,然后语法%fname:*prefix=%将第一次出现的"prefix"替换为nothing.棘手的是Windows首次尝试在首次解析命令时扩展%fname%.当然,这不起作用,因为它尚未定义.在命令行中,如果找不到变量,则保留百分比.CALL会导致在设置变量后发生额外的扩展阶段,因此扩展会起作用.
如果在运行命令之前定义了fname,那么它将只是尝试为每次迭代重命名该文件,而不是在循环中分配的值.
如果要使用不同的前缀再次运行该命令,则必须先再次清除该定义.
编辑 - 这是一个名为"RemovePrefix.bat"的批处理文件,可以完成这项工作
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
Run Code Online (Sandbox Code Playgroud)
假设你有一个名为like的文件"prefixName.txt",那么你将通过执行来使用该脚本
RemovePrefix "prefix" "*.txt"
Run Code Online (Sandbox Code Playgroud)
批处理文件将重命名当前目录中的文件.除非批处理文件存在于PATH变量中的目录中,否则批处理文件也必须位于当前目录中.或者,您可以在调用批处理文件时指定批处理文件的完整路径.
扩展规则在批处理文件中有所不同.FOR变量必须引用为%% A而不是%A,并且%% fname %%最初不会展开,而是将双倍百分比转换为单个百分比,然后在CALL之后展开%fname%.如果已使用批处理文件定义fname,则无关紧要.SETLOCAL将fname的临时(本地)定义为批处理文件.
| 归档时间: |
|
| 查看次数: |
52356 次 |
| 最近记录: |