使用批处理

时间:2016-04-14 07:41:06

标签: windows batch-file

我希望能够"编辑"带有批处理脚本的文件的文件夹名称。例如,如果文件夹是20011993,我希望能够通过设置变量来添加或删除任何位置的字符。一些输出示例是:

  

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

我意识到我理论上应该能够使用delim和令牌来做到这一点,但我需要一些帮助。

1

此代码将删除文件的6个字符,但我想在文件夹中使用它...我可以在以后解决这个问题

@ECHO ON
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir *.txt /b /a-d ') 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变为var然后使用delims和tokens来确定文件名中的位置。我将非常感谢任何帮助,谢谢。

我正在使用Windows 10 64位。

我道歉,如果这有点令人困惑,我尽量做到尽可能简短。

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试将日期为文件名的文件夹重命名为同一日期,但已进行了编辑。要做到这一点,你可以做一些事情:

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

这假设您已将folderName保存到变量中。有关变量子字符串的更多信息,请查看this

请注意,这回显了重命名的命令,要实际重命名该文件夹,您应该从该行中删除echo

答案 1 :(得分:1)

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

├───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!"
)