Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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/7/python-2.7/5.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 如何将不同子文件夹中的所有文件名重命名为相同?_Batch File - Fatal编程技术网

Batch file 如何将不同子文件夹中的所有文件名重命名为相同?

Batch file 如何将不同子文件夹中的所有文件名重命名为相同?,batch-file,Batch File,如何将不同文件夹中的所有文件名更改为相同,如: C:\Workspace\1\a.jpg C:\Workspace\2\ab.doc C:\Workspace\3\abc.jpg 到 以下是此任务的批处理文件: @echo off set "SourceFolder=C:\Workspace" if not exist "%SourceFolder%\1\*.jpg" goto EndBatch for %%I in ("%SourceFolder%\1\*.jpg") do ( r

如何将不同文件夹中的所有文件名更改为相同,如:

C:\Workspace\1\a.jpg
C:\Workspace\2\ab.doc
C:\Workspace\3\abc.jpg


以下是此任务的批处理文件:

@echo off
set "SourceFolder=C:\Workspace"
if not exist "%SourceFolder%\1\*.jpg" goto EndBatch

for %%I in ("%SourceFolder%\1\*.jpg") do (
    ren "%%I" "scan.jpg" 2>nul
    if errorlevel 1 goto EndBatch
    goto RenameDOC
)

:RenameDOC
for %%I in ("%SourceFolder%\2\*.doc") do (
    ren "%%I" "scan.doc" 2>nul
    goto RenameJPG
)

:RenameJPG
for %%I in ("%SourceFolder%\3\*.jpg") do (
    ren "%%I" "scan.jpg" 2>nul
    goto EndBatch
)

:EndBatch
set "SourceFolder=
如果批处理文件在目录
C:\Workspace\1
中找不到非隐藏的*.jpg文件,则批处理文件不会执行任何操作

它将目录
C:\Workspace\1
中找到的*.jpg文件重命名为
scan.jpg
。如果由于缺少此操作的NTFS或文件访问权限,或者此目录中已有文件
scan.jpg
,而导致此操作不成功,则批处理文件不会执行其他操作

成功将目录
C:\Workspace\1
中的first*.jpg文件重命名为
scan.jpg
后,批处理文件接下来搜索目录
C:\Workspace\2
中的first非隐藏的*.doc文件,并将其重命名为
scan.doc
。独立于此重命名操作的结果,批处理文件将继续在下一个目录
C:\Workspace\3
中重命名文件,在该目录上,仅第一个非隐藏*。jpg文件将重命名为
scan.jpg
,而不评估此重命名操作的结果

最后,批处理文件删除在顶部定义的环境变量并退出

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • 获取/?
  • goto/?
  • 如果/?
  • ren/?
  • 设置/?

我用这种方法来解决这件事。希望它的工作也能给其他人。我正在使用powershell。

如果
C:\Workspace\2
同时包含ab.doc和C.jpg,会发生什么情况?另外,这样做的用例是什么?为什么?@lit如果同时包含这两个文件,它也将更改为scan.doc和scan.jpg。这是为了使所有文件都相同,因为有些文件的名称不同,很难在每个文件夹中跟踪。@SyafiqLatif-对不起,我给出了错误的示例。如果
C:\Workspace\2
同时包含a.jpg和b.jpg怎么办?
@echo off
set "SourceFolder=C:\Workspace"
if not exist "%SourceFolder%\1\*.jpg" goto EndBatch

for %%I in ("%SourceFolder%\1\*.jpg") do (
    ren "%%I" "scan.jpg" 2>nul
    if errorlevel 1 goto EndBatch
    goto RenameDOC
)

:RenameDOC
for %%I in ("%SourceFolder%\2\*.doc") do (
    ren "%%I" "scan.doc" 2>nul
    goto RenameJPG
)

:RenameJPG
for %%I in ("%SourceFolder%\3\*.jpg") do (
    ren "%%I" "scan.jpg" 2>nul
    goto EndBatch
)

:EndBatch
set "SourceFolder=
get-childItem -recurse | Where {$_.extension -eq ".jpg"} | rename-item -NewName { "scan.jpg" }