该DIR /S
选项将为您提供整个文件夹层次结构。而且您还希望/A-D
选择从输出中抑制文件夹。键入HELP DIR
或DIR /?
了解更多信息。
但是,我建议不要使用FOR /F
with ,而是使用. 键入或了解更多信息。另请参阅http://judago.webs.com/batchforloops.htm以更容易理解该命令的解释。DIR
FOR /R
HELP FOR
FOR /?
FOR
无论哪种方式,您还需要创建所有目标文件夹。最简单的方法是XCOPY /T /E
在处理文件之前使用创建目标文件夹。
一些额外的提示:
- 只需放在
@echo off
顶部,而不是在每个命令前面加上@
ECHO.
已被广泛使用多年,但实际上可能无法正常工作。使用起来更安全ECHO(
。
- 您可能不希望您定义的环境变量在批处理完成后一直存在。放在
SETLOCAL
顶部将使变量成为临时变量,并且它们只会在批处理文件完成或ENDLOCAL
执行之前存在。鉴于您PAUSE
最后使用的是,我怀疑您是通过双击文件或快捷方式来运行批处理文件。如果是这样,那么命令窗口最后会关闭,变量也会随之消失。然后SETLOCAL
不需要,但无论如何它仍然可能是一个好习惯。
这是包含所有建议的完成代码。编辑 - 原始代码不起作用。更改以解决 tiance 的评论
@echo off
setlocal
set dir1=mulit-simp
set dir2=mulit-trad
cd "%~dp0"
:: Replicate tree
if not exist "%dir1%" md "%dir1%"
if not exist "%dir2%" md "%dir2%"
xcopy /t /e "%dir1%" "%dir2%"
:: Get length of absolute path of %dir1%
<nul set /p "=%cd%\%dir1%" >getLength.tmp
for %%F in (getLength.tmp) do set len=%%~zF
del getLength.tmp
:: Process the files
for /r "%dir1%" %%F in (*) do (
set "src=%%F"
setlocal enableDelayedExpansion
opencc.exe --input="!src!" --output="%dir2%!src:~%len%!"
endlocal
)
echo(
echo Done!
echo(
pause