Declined pasting text with tabs from the clipboard

Aug 2, 2011
Berlin, Germany
When I'm creating batch-scripts, I use a lot of indentation with tabs to make the code better readable.
When I copy parts of the code or even a codeblock into the clipboard
and paste it to the TCC command window for testing, it stops at the first tab or produces a great derangement.

I think it is caused by filename completion, but is there a way to avoid this?
Or shouldn't filename completion be disabled during the paste process (that's my suggestion)?

I could imagine that many users have this problem, which is pretty annoying for me.


Staff member
May 14, 2008
The copy/paste can't ignore tabs, because the copying is occurring in one application (Take Command) and the pasting is done by injecting the characters into the keyboard input of another application (TCC in this instance, but it could be anything -- and only TCC would consider tabs to be a special key).
Aug 2, 2011
Berlin, Germany
I stopped using tabs for indenting eons ago.
That goes for me as well. Too many variations on default tab settings.
David and Steve, how are you indenting? With spaces? For me it is not comfortable.
Let's assume I have the follwing snippet copied from np++ to the clipboard (I know it's not really reasonable here but I have this actually on my monitor):
The first line is indented with spaces, tho following with tabs.
set    dir=d:\IO
set    dir=%@getdir[%dir]
echo   "%dir"
if     "%dir" eq "" (
echo   no dir selected, quitting
goto   end
With right mouse click in TCC I get this:
C:\...\TCCLE13x64 >set    dir=d:\IO
C:\...\TCCLE13x64 >set_
(and a beep)
And with ctrl-v only the first line is pasted:
C:\...\TCCLE13x64 >set    dir=d:\IO_
(no beep)
(note the underscore which represents the cursor)

What could be against ignoring tabs during the paste process respectively replacing them with spaces?
I'm often annoyed by this. I have to go back to the editor, convert tabs to spaces, copy to clipboard, paste it in TCC and finally perform an undo of the convert in the editor.

Aug 2, 2011
Berlin, Germany
All my code uses spaces for indenting. My editor automatically indents using spaces when I press Enter or Tab.
np++ has this option, too. But I'm soooo used to indenting with tabs.
Aug 2, 2011
Berlin, Germany
How is using spaces harder if the editor does the indenting (and undenting) for you? I suppose pressing backspace is different.
hmmm. dont' know. have to think (and sleep) about it.
Aug 2, 2011
Berlin, Germany
For 2 days I tried to get familiar with "space-indenting", but it drives me crazy.
In my actual script I do a lot of echoing and it is definitly a difference if you
I "believe" I've also seen functional differences when using

if conditiion (
and so on.
But I changed back to "tab-indenting" (never change a running system ;-)

So PLEASE make it possible to ignore tabs (convert them to a space) when pasting text into then TCC console window.
Aug 2, 2011
Berlin, Germany
tpipe /input=clip: /number=0,4 /output=clip:

The second argument to /NUMBER appears to be the tab width.
Thank you, looks like a convenient solution, in special as an alias.
I will try it when I've got a licenced V.14.

Charles Dye

Super Moderator
Staff member
May 20, 2008
Albuquerque, NM
Thank you, looks like a convenient solution, in special as an alias.
I will try it when I've got a licenced V.14.

I was going to suggest DETAB < CLIP: > CLIP: and then thought there might be some clever way to do it using TPIPE. But if you don't have TPIPE, there must be a dozen implementations of DETAB out there.
Aug 2, 2011
Berlin, Germany
All my code uses spaces for indenting. My editor automatically indents using spaces when I press Enter or Tab.
Just to make it clear: If you are a programmer and are developing code with an IDE, you're right. In this case I wouldn'd care about space- or tab-indenting, too, because that doesn't has an influence on the binary.
But I use TCC as my "native" language, so all formatting in the script has direct impact to the output.

Is that comprehensible (because english is not my first language)?
Aug 2, 2011
Berlin, Germany
I had an inexplicable error and for a moment I thought to isolate and prepare it for the forum.
But it was late in the evening and I reverted to space-indenting.
It was something like
for /L ... (
    set /a array[0]=%array[0] + ...
I first changed it to @eval (no improvement)l, then to a DO loop (no improvement) and finally changed it to tab-indenting (worked as expected).
Sorry, I don't remember it exactly. I know, this is unsatisfying for the forum.
Aug 2, 2011
Berlin, Germany
I just forgot it. This is the script I was working on ( and stumbled over tab- vs. space-indenting again :) )
It's just to share the code with you. Perhaps someone can profit from it.
@echo    off
rem    fcpy.btm (file count per year)
rem    usage: fcpy [/y:n] n=years back [> filename] filename= csv-file for excel
rem    - generating a statistical report of # files / size of files for a choosen directory
rem    - values too old or in the future ( generated e.g. by misconfigured digicams ) are summarized
rem    - uses "logparser" as an external utility
rem    - the output can be used in ms excel ( convert text to columns )
rem    frank, july 2012
on      break goto end
rem    standard for back is 10 years. did user supply /y:n ?
set    yearsback=10
if      %@word[":",0,%1] eq /y set yearsback=%@word[":",1,%1]
rem    array-index, 0-based
set    /a lastindex=%yearsback + 1
rem    number of elements, 1-based
set    /a nelements=%yearsback + 2
set    /a baseyear=%_year - %yearsback
unsetarray /q  array
setarray        array[%nelements,2]
unsetarray /q  sumarray1
setarray        sumarray1[2]
set    dir=n:\dv\dlfj
rem    @getdir returns empty string if the user selects "Cancel" or presses Esc
set    dir=%@getdir[%dir]
if      "%dir" eq "" (
        echo    no dir selected, quitting
        goto    end
rem    generating header lines
echo    Distribution of File-Age and -Size for Directory "%dir"
echos  Dir,,older,,
for    /L %y in (1,1,%@eval[%lastindex - 1]) echos %@eval[%baseyear + %y],,
echo    future,,totals
echos  ,# Files,MB,
for    /L %y in (1,1,%@eval[%lastindex - 1]) echos # Files,MB,
echo    # Files,MB,# Files,MB
setdos  /x-56
rem    first only the basedir
set    subdir=%dir
gosub  count -recurse:0
rem    then all subdirs
do      subdir in /o:n /a:d "%dir"\*.*
        gosub count -recurse:-1
setdos  /x0
:count [ recurse ]
rem echoerr %subdir
rem if      %@files["%subdir",d] eq 0 (
rem        echo        %subdir,
rem        return
rem        )
rem    zeroing all array-elements
do      loop = 0 to %lastindex
        set array[%loop,0]=0
        set array[%loop,1]=0
del    /qe filecount_per_year.csv
rem    logparser produces something like this (year,#files,size):
rem    1997,8,1820999
rem    1999,6,786109
rem    2002,174,100661945
rem    2003,188,132494748
rem    2008,113,1935912035
rem    2009,58,52290671
rem    2010,148,581229337
rem    2011,95,4742529049
rem    2012,105,718922410
logparser -i:fs  %recurse %=
        "select to_string(LastWriteTime,'yyyy') as year, count(*) as count, sum(size) as total      %=
        into    filecount_per_year.csv  %=
        from    '%subdir\*.*'    %=
        where  attributes not like 'D%%'      %=
        group  by year order by year"  %=
        -o:csv -q:on -filemode:0 -headers:off
if %? ne 0 (
        echoerr pause fehler in "%subdir"
        pause "%subdir"
set    count=0
set    tsize=0
set    sumarray1[0]=0
set    sumarray1[1]=0
do      line in @filecount_per_year.csv
        set    year=%@word[",",0,%line]
        set    count=%@word[",",1,%line]
        set    tsize=%@word[",",2,%line]
        set    tsize=%@eval[ %tsize / 2**20]
        set    tsize=%@formatn[ .0,%tsize]
        rem    too old / too young ?
        iff    %year LE %baseyear then
                rem    older
                set    /a array[0,0]=%array[0,0] + %count
                set    /a array[0,1]=%array[0,1] + %tsize
        elseiff %year GT %_year then
                rem    future dates
                set    /a array[%lastindex,0]=%array[%lastindex,0] + %count
                set    /a array[%lastindex,1]=%array[%lastindex,1] + %tsize
                set    /a aindex=%year - %baseyear
                set    array[%aindex,0]=%count
                set    array[%aindex,1]=%tsize
        set    /a sumarray1[0]=%sumarray1[0] + %count
        set    /a sumarray1[1]=%sumarray1[1] + %tsize
echos  "%subdir",
do      loop = 0 to %lastindex
        echos  %array[%loop,0],%array[%loop,1],
echos  %sumarray1[0],%sumarray1[1]

Similar threads