Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用ren命令错误替换_Batch File_Cmd - Fatal编程技术网

Batch file 使用ren命令错误替换

Batch file 使用ren命令错误替换,batch-file,cmd,Batch File,Cmd,我正在为Windows cmd编写一个脚本,以更正目录中的文件名。ren命令用于纠正不同情况下的文件名。但有一次,奇怪的事情发生了 ren cl\u cjl\u cl\u crmt*cjl\u cl\u crmt.* 它将文件从cl\u cjl\u cl\u crmt\u example.sql重命名为cjl\u cl\u crmt.sql,并保留一个额外的\u mt 它似乎省略了替换中的最后2个字符。当我尝试使用ren-cl\u-cjl\u-cl*cjl\u-cl* 它将文件从cl\u cjl

我正在为Windows cmd编写一个脚本,以更正目录中的文件名。
ren
命令用于纠正不同情况下的文件名。但有一次,奇怪的事情发生了

ren cl\u cjl\u cl\u crmt*cjl\u cl\u crmt.*

它将文件从
cl\u cjl\u cl\u crmt\u example.sql
重命名为
cjl\u cl\u crmt.sql
,并保留一个额外的
\u mt

它似乎省略了替换中的最后2个字符。当我尝试使用
ren-cl\u-cjl\u-cl*cjl\u-cl*

它将文件从
cl\u cjl\u cl\u crmt\example.sql
重命名为
cjl\u cl\u crmt.sql
,并保留一个额外的
\u cl


如何获得
ren
命令的正确行为。或者更好的选择是什么?首先,我不相信您提到的新文件名,它们肯定会与相应的旧文件名具有相同的长度

当您详细查看源名称和目标名称时,您会发现附加的
mt
cl
部分只是源名称中位于相同位置的字符的副本:

ren clu cjl clu crmt*cjl clu crmt_*
源名称:cl\u cjl\u cl\u crmt\u example.sql
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
目标名称:cjl_cl_crmt_mt_example.sql
ren cl_cjl_cl_*cjl_cl_*
源名称:cl\u cjl\u cl\u crmt\u example.sql
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
目标名称:cjl_cl_cl_crmt_example.sql
源名称和目标名称之间没有相关性,因此目标名称的任何部分都不会以任何方式链接到源名称中的同一部分;您可以通过以下示例证明这一点:

ren cl_*12345×89*
源名称:cl\u cjl\u cl\u crmt\u example.sql
↓↓  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
目标名称:12345l_89_crmt_example.sql
如果您只想删除
cl
前缀,鉴于此部分的长度始终正好为三个字符,您可以使用以下技巧:

ren“cl.*”“//*”
这里的引号是强制性的,但无论如何,它们都是良好的做法


所有这些都在这篇超级用户帖子中描述:

最好是在批处理文件中
for/F“tokens=1*delims=%%I('dir-cl\u-cjl\u-crmt.*/a-D/b2^>nul')do ren%%I\%%%J”“%J”
for/F“tokens=1*delims=%I in('dir-cl\u-cjl\u-crmt*/a-D/b2^>nul')do ren直接在命令提示窗口中。打开,运行
for/?
dir/?
并从第一页的顶部到最后一页的底部仔细完整地阅读这两个输出帮助。有关您的问题的详细信息,请查看。