如何用批处理文件替换所有文件和文件夹中的空格和符号



我想我已经很接近了。我有一个文件夹,在我试图重命名所有的子文件夹和文件,使caps被剥离,符号替换为适用的单词,并在两个文件和他们的父子文件夹中的空格改为连字符。

这是我目前为止的批处理文件:

cd d:scriptstesting
for /r %%D in (.) do @for /f "eol=: delims=" %%F in ('dir /l/b "%%D"') do @ren "%%D%%F" "%%F"
SET location=d:scriptstesting
for /R %location% %%A in (*.*) do call :replspace "%%A"
for /R %location% %%A in (*.*) do call :repland "%%A"
goto :eof 
:replspace
set "_fn=%~nx1"
ren %1 "%_fn: =-%"
:repland
set "_fn=%~nx1"
ren %1 "%_fn:&=and%"

您可能会看到,首先它遍历并将d:scriptstesting中的所有内容(文件和文件夹)重命名为小写。接下来,它重命名同一目录下的所有文件,用连字符和"&"代替空格。用"one_answers"这个词。这一切都行得通……除了我需要对文件夹进行相同的符号和空间更改之外,我没有找到任何关于如何做到这一点的真正信息。

谁有什么建议?顺便说一句,这运行在server 2012 r2上,但是由于互操作性问题,脚本必须是老式的批处理脚本。

您可以使用一个for循环来执行整个替换任务。,通过使用dir /s递归搜索目录。

@echo off
setlocal enabledelayedexpansion
pushd "d:scriptstesting" || goto :EOF
for /f "delims=" %%i in ('dir /b /l /s') do (
set "item=%%~i"
set "item=!item:%%~dpi=!"
set "item=!item: =-!"
ren "%%~fi" "!item:&=and!"
)
popd

我没有将set替换为&替换为变量,因为只完成了两次替换,所以简单地在最后一项上使用替换是有意义的,而不需要再次使用set。如果您需要添加更多的替换,请将它们添加到ren行之前:

注意本例仅将echo结果用于测试目的。只有在确信结果与预期一致时才删除echo

然后,注意pushd语句中的|| goto :EOF。这是有充分理由的。如果cdpushd失败,通常脚本将继续重命名,从它启动的工作目录,或以前的cdpushd等。在这种情况下,如果它找不到目录,或者没有权限,它将完全跳过脚本的其余部分。

最后的注意。如果您的文件或文件夹包含!,则需要更改。然后,您可以简单地恢复到将setren移动到标签中,然后调用标签,因为delayedexpansion将导致!丢失。

虽然Gerhard的脚本是干净的,应该可以工作,但在某些情况下,比如我的情况下,它会自己出错。我最后使用了这个脚本:

rem #### Step 1: move to working directory ####
cd "d:scriptstesting"
rem #### Step 2: change case on everything ####
for /r %%D in (.) do @for /f "eol=: delims=" %%F in ('dir /l/b "%%D"') do @ren "%%D%%F" "%%F"
rem #### Step 3: set location ####
SET location=d:scriptstesting
for /R %location% %%A in (*.*) do call :replspace "%%A"
for /R %location% %%A in (*.*) do call :repland "%%A"
rem #### Step 4: replace spaces/symbols on directories ####
setlocal enabledelayedexpansion
pushd "D:scriptstesting" || goto :EOF
for /f "delims=" %%i in ('dir /l /b /s /ad') do (
set "item=%%~i" 
set "item=!item: =-!"
move "%%~fi" "!item:&=and!"
)
popd
rem #### variables ####
:replspace
set "_fn=%~nx1"
ren %1 "%_fn: =-%"
:repland
set "_fn=%~nx1"
ren %1 "%_fn:&=and%"

这是我自己的脚本和格哈德的脚本稍加修改的组合。基本上,我最终完成了修改。

  1. 将所有内容更改为小写
  2. 替换文件名中的空格和符号。
  3. 替换目录名中的空格和符号。

我知道这是重复的,我想用更少的行来做,但它有效。

相关内容

  • 没有找到相关文章

最新更新