用批处理操作文件夹名称

我希望能够使用批处理脚本“编辑”文件的文件夹名称。 例如,如果该文件夹是20011993我希望能够通过设置一个variables添加或删除任何位置的字符。 几个输出示例是:

20_01_1993,2-1-1993,20-01-1993,1993。

我意识到我理论上可以使用分隔符和令牌来做到这一点,但我需要一点帮助。


1。

这段代码将删除一个文件的6个字符,但是我想在一个文件夹上使用它…我可以在以后解决这个问题

@ECHO ON setlocal enabledelayedexpansion for /f "delims=" %%a in ('dir *.txt /b /ad ') do ( set "name=%%~na" copy "%%a" "C:\FolderB\!name:~0,-6!%%~xa" ) pause 

我知道我可以重命名像RENAME "C:\users\my profile\my word documents" "my documents"整个文件夹,但我只想编辑已命名的文件夹。


2。

该代码在文件夹名称前添加了一个0。 这是迄今为止所能做到的,但是我想确定添加0的位置

 @ECHO ON for /D %%f in (*) do rename "%%f" "0%%f" pause 

所以我估计0变成一个变种,然后使用delims和令牌来确定文件名中的位置。我会感谢任何帮助谢谢。

我正在使用Windows 10 64位。

我很抱歉,如果这有点混乱,我尽可能简短。

看起来你正在试图重命名一个文件夹的日期作为文件名到相同的日期,但编辑。 要做到这一点,你可以做一些事情:

 @echo off set "folderName=20011993" SET newFolderName=%folderName:~0,2%_%folderName:~2,2%_%folderName:~4% echo ren %folderName% %newFolderName% pause 

这假定你已经把folderName保存到变量了。 有关变量子字符串的更多信息,您应该看看这个

请注意,这反映命令重命名,实际上重命名文件夹,你应该从该行删除echo

假设你有一个像这样的文件夹结构:

 ├───20011993 │ ├───someFile.txt │ └───anotherFile.txt ├───21011993 │ └───andAnotherFile.txt └───22011993 └───yetAnotherFile.txt 

您可以从保存这些文件夹的父目录运行此操作。

 setlocal enabledelayedexpansion for /f "delims=" %%a in ('dir ????1993 /b/ad ') do ( set "name=%%~na" echo ren "!name!" "!name:~0,2!-!name:~2,2!-!name:~4,4!" ) 

如果你有几年的文件夹,你可以使用for /l循环遍历每一年的数字。

 setlocal enabledelayedexpansion set beginYear=1993 set endYear=2016 for /l %%x in (%beginYear%,1,%endYear%) do call :renameLoop %%x :renameLoop for /f "delims=" %%a in ('dir ????%1 /b/ad ') do ( set "name=%%~na" echo ren "!name!" "!name:~0,2!_!name:~2,2!_!name:~4,4!" )