Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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/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
Windows 根据父文件夹和父文件夹名称重命名文件_Windows_Batch File_Cmd - Fatal编程技术网

Windows 根据父文件夹和父文件夹名称重命名文件

Windows 根据父文件夹和父文件夹名称重命名文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我需要windows批处理文件以文件夹名称和子文件夹名称作为子文件夹中文件名的前缀 e、 g.我已经为日期12017创建了以下结构的文件夹 d:\12012017\1234\ABC\file1.txt d:\12012017\1234\ABC\file2.txt d:\12012017\5678\PQR\file3.txt d:\12012017\2345\XYZ\file4.txt 需要将它们重命名为 d:\12012017\1234\ABC\1234_ABC_file1.txt d:\12

我需要windows批处理文件以文件夹名称和子文件夹名称作为子文件夹中文件名的前缀

e、 g.我已经为日期12017创建了以下结构的文件夹

d:\12012017\1234\ABC\file1.txt
d:\12012017\1234\ABC\file2.txt
d:\12012017\5678\PQR\file3.txt
d:\12012017\2345\XYZ\file4.txt
需要将它们重命名为

d:\12012017\1234\ABC\1234_ABC_file1.txt
d:\12012017\1234\ABC\1234_ABC_file2.txt
d:\12012017\5678\PQR\5678_PQR_file3.txt
d:\12012017\2345\XYZ\2345_XYZ_file4.txt
尝试了以下代码,但无效

set mydate=%date:~0,2%%date:~3,2%%date:~6,4%
REM ECHO %mydate%
D:
CD D:\%mydate%
@ECHO STARTING RENAME
pushd D:\%mydate%
for /d %%D in (*) do (
@ECHO 1- pushd "%%D"
@ECHO CD  %%D
for /d %%X in (*) do (
@ECHO pushd "%%X"
  for /r %%F in (*) do (
 @ECHO 2- pushd "%%F"
    for %%P in ("%%F\..") do (
 @ECHO 3- pushd "%%P"
 @ECHO 4 - ren "%%F" "%%~nxD_%%~nxF"
    )
  )
)
  popd
)
popd
CD\

有更好的方法以正确的格式获取当前日期,但我将保留依赖于区域设置的现有方法

在内部循环中使用FOR/F with DIR而不是simple FOR很重要,因为simple FOR可以迭代已经命名的文件,但是FOR/F不会

@echo off

:: Set current directory to today's date
pushd "d:\%date:~0,2%%date:~3,2%%date:~6,4%"

for /d %%A in (*) do (                    %= Iterate all child folders =%
  for /d %%B in ("%%A\*") do (            %= Iterate grandchild folders = %
    for /f "eol=: delims=" %%F in (       %= Iterate result of DIR command =%
      'dir /b /a-d "%%~B\*" 2^>nul'       %= List all files in grandchild folder =%
    ) do ren "%%~B\%%F" "%%~A_%%~nxB_%%F" %= Rename each file =%
  )
)

popd

并添加您以前尝试过的代码!疑问句是以问号结尾的句子。“我需要剧本”绝对不是问题。请至少阅读并学习!这是如何作为评论使用的?%=迭代所有子文件夹=%@Cornbetle-环境变量名不能包含
=
,动态变量除外,如
%=ExitCode%
。甚至动态变量的名称中也没有任何
=
,只有第一个字符。因此,只要内容不包含
%
,则
%=Anything=%
保证扩展为零。一个用作注释的空变量,我喜欢它!