使用CMD批量为文件添加父文件夹前缀失败问题求助
Why Your Original Script Failed
You hit a classic CMD quirk: immediate variable expansion. When CMD runs a block of code wrapped in parentheses, it replaces all %variable% references with their value before the loop even starts. By the time your inner rename loop executes, %_test% has already been overwritten with the last folder's path—so every file ends up with that final folder's prefix instead of their parent's.
Corrected Script
To fix this, we need to enable delayed variable expansion, which lets CMD resolve variables during each loop iteration using !variable! instead of %variable%. We'll also clean up the script to avoid relying on cd (which can break with spaces or special characters in paths) and directly extract the folder name from the full path:
@echo off setlocal enabledelayedexpansion :: Loop through every subfolder in your target directory for /d %%i in ("C:\Users\noir1\Desktop\New folder\*") do ( :: Pull just the folder name (no full path) to use as the prefix set "folderPrefix=%%~nxi" :: Rename each file in the current subfolder with the parent's prefix for %%a in ("%%i\*") do ( ren "%%a" "!folderPrefix! %%~nxa" ) ) endlocal
Breakdown of the Fix
@echo off: Hides the raw command prompts while the script runs, keeping output clean.setlocal enabledelayedexpansion: This is the core fix—delayed expansion ensures!folderPrefix!updates with each new folder in the loop.%%~nxi: Extracts just the folder name (no full path) from the directory variable%%i.%%~nxa: Grabs the original filename and extension of each file, so we preserve the original name while adding the parent folder prefix.endlocal: Resets the CMD environment to its normal state after the script finishes.
Quick Tip for Direct CMD Execution
If you're running this directly in a CMD window (not saving it as a .bat script), replace all double percent signs %% with single %:
setlocal enabledelayedexpansion for /d %i in ("C:\Users\noir1\Desktop\New folder\*") do (set "folderPrefix=%~nxi" & for %a in ("%i\*") do ren "%a" "!folderPrefix! %~nxa") endlocal
内容的提问来源于stack exchange,提问作者DSt_FTW

