如何将输入和设计保持在同一条线上而不切换到下一行?

时间:2013-01-02 21:22:54

标签: batch-file

所以我创建了一个批处理文件,它显示了你的目录,这只是一个功能,但无论如何,你的目录在批处理文件中会发生变化,因此目录文本就会出现改变......

所以这里有一个例子......

|----------------------------------|
|>>C:\Users\Joel\..................|
|----------------------------------|

当您更改目录时,它看起来像:

|----------------------------------|
|>> C:\Users\Joel\Desktop\.................|
|----------------------------------|

如何制作它所需要的信件数量多于远离空格的信件?

请帮帮忙?

1 个答案:

答案 0 :(得分:1)

您想要将字符串填充到固定长度。简单的策略是创建一个包含字符串的变量以及足够多的填充字符以达到限制。然后使用子字符串操作将字符串修剪为所需的长度。我稍微修改了算法以保留整个字符串,如果它已经大于或等于所需的长度。

@echo off

:: Initialize
setlocal enableDelayedExpansion
set maxLen=50
set "pad="
set "div="
for /l %%N in (1 1 %maxLen%) do (
  set "pad=!pad!."
  set "div=!div!-"
)
set "div=|!div!|"

:: Test the display
pushd "c:\Users\Joel"
call :displayCurrentDirectory
pushd "c:\Users\Joel\Desktop"
call :displayCurrentDirectory
exit /b

:displayCurrentDirectory
setlocal
set "txt=>>!cd!\"
if "!txt:~%maxLen%,1!" equ "" (
  set "txt=!txt!!pad!"
  set "txt=!txt:~0,%maxLen%!"
)
echo !div!
echo ^|!txt!^|
echo !div!
echo(
exit /b

这是一个使用多行固定宽度的版本,以强制字符串适合分配的水平空间。

@echo off

:: Initialize
setlocal enableDelayedExpansion
set maxLen=15
set "pad="
set "div="
for /l %%N in (1 1 %maxLen%) do (
  set "pad=!pad!."
  set "div=!div!-"
)
set "div=|!div!|"

:: Test the display
pushd "c:\Users\Joel"
call :displayCurrentDirectory
pushd "c:\Users\Joel\Desktop"
call :displayCurrentDirectory
exit /b

:displayCurrentDirectory
setlocal
echo !div!
set "txt=>>!cd!\"
:loop
if "!txt:~0,%maxLen%!" neq "!txt!" (
  echo ^|!txt:~0,%maxLen%!^|
  set "txt=!txt:~%maxLen%!"
  goto :loop
)
set "txt=!txt!!pad!"
set "txt=!txt:~0,%maxLen%!"
echo ^|!txt!^|
echo !div!
echo(
exit /b

请查看Improved :Format, new :FormatVar and :FormatColor functions 以获取更通用的例程来格式化文本。它允许文本的左右对齐。