无法找到我尝试的方法(这么简单):我有这个结构:
+folder1(包含:)
-folder2
-folder3
-...
-folderi
我只想在文件夹 2 后添加简单的单词 (WORD)...i simple ?我应该得到:
-folder1WORD
-folder2WORD
-...
-folderiWORD
但我不想更改文件夹 1 的名称(我只成功更改了所有文件夹)
但是其中一些名称中有空格(我已成功将“带空格的文件夹”转换为其他 3 个 folderWORD 和 withWORD 和 spaceWORD。
但 WORD 的第一个字符应该是空格(没办法做到这一点)
现在我已经尝试了在其他线程中发现的方法,但没有成功!
有人有办法做到这一点吗?谢谢您的帮助。
答案1
如果我理解这个问题,那么这将适用于交互式命令提示符:
for /d %D IN (c:\temp\folder1\*.*) do ren "%D" "%~nxDWORD"
如果您在批处理文件中运行此操作,则需要将每个百分号加倍:
for /d %%D IN (c:\temp\folder1\*.*) do ren "%%D" "%%~nxDWORD"
该/d
选项指示for
仅查看目录。~nxD
修饰符指示它仅打印文件name 和 eX张力,D
而不是完整路径。FOR /?
有关修饰符语法的更多信息,请参阅。
例子:
前
c:\temp\folder1>dir c:\temp\folder1
Directory of c:\temp\folder1
<DIR> folder with space
<DIR> folder.dotted
<DIR> folder2
<DIR> folder3
<DIR> folderi
命令
c:\temp\folder1>for /d %D IN (c:\temp\folder1\*.*) do ren "%D" "%~nxDWORD"
c:\temp\folder1>ren "c:\temp\folder1\folder with space" "folder with spaceWORD"
c:\temp\folder1>ren "c:\temp\folder1\folder.dotted" "folder.dottedWORD"
c:\temp\folder1>ren "c:\temp\folder1\folder2" "folder2WORD"
c:\temp\folder1>ren "c:\temp\folder1\folder3" "folder3WORD"
c:\temp\folder1>ren "c:\temp\folder1\folderi" "folderiWORD"
结果
c:\temp\folder1>dir
Directory of c:\temp\folder1
<DIR> folder with spaceWORD
<DIR> folder.dottedWORD
<DIR> folder2WORD
<DIR> folder3WORD
<DIR> folderiWORD
答案2
@GuitarPicker
谢谢您的回答,但在这里不起作用。
1 是的,这是一个批处理文件(另一个文件的一部分)
2 实际使用中,bat 文件位于第一个文件夹中,因此我修改了您的代码,如下所示:它在父文件夹中有效,但在子文件夹中无效
:: for testing
echo %e%*.*
pause
dir %e%*.*
pause
for /d %%D IN (%e%*.*) do ren "%%D" "%%~nxDWORD"
pause
@ DavidPostill
我的起始代码如下:
echo off
for /f "tokens=* delims= " %%a in ('dir/s/b/ad') do (
echo %%a
::this works made new folder with extension even with space
mkdir "%%a"_WORD_test
::this does not work
ren %%a "%%a"_WORD
)
pause
感谢您的帮助
答案3
找到了一种方法,但没有完全成功:我有这个:
获取子文件夹列表 :OK
不处理父文件夹:OK
获取要重命名的好名字:OK
但重命名本身不起作用...
@echo off
Set /a COUNTER=0
setlocal ENABLEDELAYEDEXPANSION
:: affiche les dossiers en inverse MAIS aussi le dossier parent NO USE
for /f "usebackq tokens=1,*" %%a in (`dir /ad /b /s /o-n`) do (
::on saute le premier - skip first = parent dir
echo testing %%a
echo counter !counter!
if !counter!==0 (
echo abstention
) ELSE (
echo Renaming %%a in %%a_pdf
::echo en %%a_pdf
::ren "%%a" "%%a"_pdf
)
set /a COUNTER=COUNTER+1
)
endlocal
pause
我在 CMD 窗口中得到这个(请注意,没有激活重命名命令时会出现错误(我的意思是当重命名在备注中时,就像之前的脚本中一样):
testing M:\x_bd\test\test_inside
counter 0
abstention
testing M:\x_bd\test\test_inside\Mayam_01-02
counter 1
Renaming M:\x_bd\test\test_inside\Mayam_01-02 in M:\x_bd\test\test_inside\Mayam_01-02_pdf
Le lecteur spécifié est introuvable.
testing M:\x_bd\test\test_inside\Mac
counter 2
Renaming M:\x_bd\test\test_inside\Mac in M:\x_bd\test\test_inside\Mac_pdf
Le lecteur spécifié est introuvable.
...
DOS 的奥秘?如果有人能帮忙……