1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Too much path in path

Discussion in 'Support' started by pb4072, Jul 28, 2008.

  1. pb4072

    Joined:
    Jul 25, 2008
    Messages:
    33
    Likes Received:
    0
    Hi,
    Well, I couldn't do it in a "for" loop, so, now I'm trying it in a batch file using "do." Here's my script.

    L:
    cd pdf\single\misc
    do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    copy %ehsfile L:\pdf\single\misc\ehs-%ehsfile
    enddo
    c:

    And, here's what I'm getting.

    copy L:\pdf\single\misc\a1203001.pdf ehs-L:\pdf\single\misc\a1203001.pdf

    What's up with this? I obviously don't want the full path prefixed with the "ehs-," only the filename itself. I tried "copy %ehsfile ehs-%ehsfile," too, but, I got the same thing.

    Can anyone help?

    Thanks,
    Peter
     
  2. Mr. Jiggs

    Joined:
    May 29, 2008
    Messages:
    37
    Likes Received:
    0
    Check out the %@Name[] function.



    Mr.Jiggs
    pb4072 wrote:




    Hi,
    Well, I couldn't do it in a "for" loop, so, now I'm trying it in a
    batch file using "do." Here's my script.

    L:
    cd pdf\single\misc
    do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    copy %ehsfile L:\pdf\single\misc\ehs-%ehsfile
    enddo
    c:

    And, here's what I'm getting.

    copy L:\pdf\single\misc\a1203001.pdf ehs-L:\pdf\single\misc\a1203001.pdf

    What's up with this? I obviously don't want the full path prefixed with
    the "ehs-," only the filename itself. I tried "copy %ehsfile
    ehs-%ehsfile," too, but, I got the same thing.

    Can anyone help?

    Thanks,
    Peter
     
  3. vefatica

    Joined:
    May 20, 2008
    Messages:
    7,952
    Likes Received:
    30
    On Mon, 28 Jul 2008 08:07:23 -0500, pb4072 <> wrote:


    I don't know why REs result in fully-qualified paths; wildcards don't.

    I suppose you could

    copy %ehsfile L:\pdf\single\misc\ehs-%@filename[%ehsfile]

    (or something like that).
     
  4. Mr. Jiggs

    Joined:
    May 29, 2008
    Messages:
    37
    Likes Received:
    0
    Check out the %@Name[] function.



    Mr.Jiggs
    pb4072 wrote:




    Hi,
    Well, I couldn't do it in a "for" loop, so, now I'm trying it in a
    batch file using "do." Here's my script.

    L:
    cd pdf\single\misc
    do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    copy %ehsfile L:\pdf\single\misc\ehs-%ehsfile
    enddo
    c:

    And, here's what I'm getting.

    copy L:\pdf\single\misc\a1203001.pdf ehs-L:\pdf\single\misc\a1203001.pdf

    What's up with this? I obviously don't want the full path prefixed with
    the "ehs-," only the filename itself. I tried "copy %ehsfile
    ehs-%ehsfile," too, but, I got the same thing.

    Can anyone help?

    Thanks,
    Peter
     
  5. pb4072

    Joined:
    Jul 25, 2008
    Messages:
    33
    Likes Received:
    0
    That worked! Thank you.

     
  6. pb4072

    Joined:
    Jul 25, 2008
    Messages:
    33
    Likes Received:
    0
    OK. Well, Mr. Jiggs' idea worked, but, I'm getting serious repetitions here.
    Here's my script:

    do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    copy %ehsfile ehs-%@Name[%ehsfile].pdf && copy %ehsfile L:\pdf\single\ehs\fedtables\ehs-%@Name[%ehsfile].pdf
    enddo

    I'm ending up with files beginning with "ehs-," but, I'm also ending up with files beginning with "ehs-ehs," "ehs-ehs-ehs," "ehs-ehs-ehs-ehs," and so on . . . !


     
  7. Mr. Jiggs

    Joined:
    May 29, 2008
    Messages:
    37
    Likes Received:
    0
    It's been a while since I've used it, but you need
    to add an "exclusion" so that files of the format "ehs-*.pdf" are not
    copied…



    Mr. Jiggs


    pb4072 wrote:




    OK. Well, Mr. Jiggs' idea worked, but, I'm getting
    serious repetitions here.
    Here's my script:

    do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    copy %ehsfile ehs-%@Name[%ehsfile].pdf && copy %ehsfile
    L:\pdf\single\ehs\fedtables\ehs-%@Name[%ehsfile].pdf
    enddo

    I'm ending up with files beginning with "ehs-," but, I'm also ending up
    with files beginning with "ehs-ehs," "ehs-ehs-ehs," "ehs-ehs-ehs-ehs,"
    and so on . . . !



    Quote:




    Originally Posted by pb4072
    Hi,
    Well, I couldn't do it in a "for" loop, so, now I'm trying it in a
    batch file using "do." Here's my script.

    L:
    cd pdf\single\misc
    do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    copy %ehsfile L:\pdf\single\misc\ehs-%ehsfile
    enddo
    c:

    And, here's what I'm getting.

    copy L:\pdf\single\misc\a1203001.pdf ehs-L:\pdf\single\misc\a1203001.pdf

    What's up with this? I obviously don't want the full path prefixed with
    the "ehs-," only the filename itself. I tried "copy %ehsfile
    ehs-%ehsfile," too, but, I got the same thing.

    Can anyone help?

    Thanks,
    Peter
     
  8. Steve Fabian

    Joined:
    May 20, 2008
    Messages:
    3,520
    Likes Received:
    4
    pb4072 wrote:
    | OK. Well, Mr. Jiggs' idea worked, but, I'm getting serious
    | repetitions here.
    | Here's my script:
    |
    | do ehsfile in "::[A-z]{1}[0-9]{7}.pdf"
    | copy %ehsfile ehs-%@Name[%ehsfile].pdf && copy %ehsfile
    | L:\pdf\single\ehs\fedtables\ehs-%@Name[%ehsfile].pdf
    | enddo
    |
    | I'm ending up with files beginning with "ehs-," but, I'm also ending
    | up with files beginning with "ehs-ehs," "ehs-ehs-ehs,"
    | "ehs-ehs-ehs-ehs," and so on . . . !

    You made a common mistake. Your source and target directories are the same,
    and the target names qualify as source names. As a result, the target files,
    which have just been created, qualify as source files, and are copied again,
    and again, and again, ...

    When an overlap between source and target set is possible, the only safe way
    to operate is to list the true source set, and operate on each set member
    without regenerating the set. The most common method to do this for file
    sets is using DIR to create the source list, and piping it to the action
    command:

    Line 1: *cdd L:\pdf\single\misc
    Line 2: dir/b "::[A-z]{1}[0-9]{7}.pdf" | for %f in (@con:) (copy %f ehs-%f
    && copy %f ..\ehs\fedtables\ehs-%f)
    Line 3: C:

    NOTE: Why do you need to make a copy of each source file in the source
    directory, with the new name? Your original program did not do that, it just
    copied the files with the new name into the target directory.

    WARNINGS:
    1/ While the method is well tested, the actual commands above are untested.
    2/ The copying with the new names into the source directory prevents
    repeating the program without directory cleanup, as repeated use will
    duplicate the files created the first time.
    --
    HTH, Steve
     
  9. pb4072

    Joined:
    Jul 25, 2008
    Messages:
    33
    Likes Received:
    0
    OK. Thanks a lot. Yes, I am copying to two places. The source directory, and, another sister directory. I need it in the source for other peoples' scripts in my company. I've resolved it by simply sending it to the second directory, only. Then, once done, I'll simply copy from there back to the source.

    Thanks again.

    Peter


     
  10. pb4072

    Joined:
    Jul 25, 2008
    Messages:
    33
    Likes Received:
    0
    Turns out this doesn't work either, Steve. I get the same results, with repetitions of filenames.


     
  11. Steve Fabian

    Joined:
    May 20, 2008
    Messages:
    3,520
    Likes Received:
    4
    pb4072 wrote:
    | Turns out this doesn't work either, Steve. I get the same results,
    | with repetitions of filenames.

    Is this after you cleaned up from your previous runs, which created from
    XXX.pdf first ehs-XXX.pdf, then ehs-ehs-XXX.pdf, then ehs-ehs-ehs-XXX.pdf,
    then ehs-ehs-ehs-ehs-XXX.pdf, then ehs-ehs-ehs-ehs-ehs-XXX.pdf, etc.?

    In general, when testing a file manipulation program, it is best to make a
    copy of the source and target directories before doing anything else under
    temporary names. Before a 2nd or subsequent test empty both source and
    target directories, and copy the saved files into them. Now you have a
    known, repeatable starting configuration.

    I never had problems with piping from DIR including files created by the
    piped-to command.
    --
    Steve
     
  12. pb4072

    Joined:
    Jul 25, 2008
    Messages:
    33
    Likes Received:
    0
    No, I'd already cleaned out the directories of all "ehs" files. I ran it again just to one directory. I'll copy them later. But, why doesn't my regex work right? I'm using the following and it's picking up files that begin with two letters.

    dir/b "::^[A-z]{1}[0-9]{7}.pdf" | for %f in (@con) copy %f ehs-%f

    It's picking up files like "ee1234567.pdf."



     
  13. Steve Fabian

    Joined:
    May 20, 2008
    Messages:
    3,520
    Likes Received:
    4
    pb4072 wrote:
    | No, I'd already cleaned out the directories of all "ehs" files. I ran
    | it again just to one directory. I'll copy them later. But, why
    | doesn't my regex work right? I'm using the following and it's picking
    | up files that begin with two letters.
    |
    | dir/b "::^[A-z]{1}[0-9]{7}.pdf" | for %f in (@con) copy %f ehs-%f
    |
    | It's picking up files like "ee1234567.pdf."

    I've not used the regular expressions inside TCC, except for a few tests
    when they were first introduced. However, from my experience with them in
    other contexts the {1} looks at least superfluous - why use a repetition
    factor for an expression that's not repeated? According to the description
    in HELP topic "regularexpressionsyntax.htm" for Ruby regex-es it ought to be
    harmless.

    Another point is [A-z] - that character set includes non-alphabetic
    characters. Which characters depends on the character encoding in effect at
    the time: ASCII v. Unicode. Since filename matches are always case
    insensitive, you could use [a-z] which is guaranteed to include only the 26
    letters of the English alphabet, regardless of encoding. You could also use
    the special representation for "alphabetic character", and the one for
    decimal digits instead of [0-9].

    BTW, you could use the less elegant but easier to understand extended
    wildcard syntax:

    dir/b [a-z][0-9][0-9][0-9][0-9][0-9][0-9][0-9].pdf" | for %f in (@con) copy
    %f ehs-%f

    or its single-process variant:

    for %f in ([a-z][0-9][0-9][0-9][0-9][0-9][0-9][0-9].pdf) copy %f ehs-%f

    Regardless, I do not like the idea of copying files into the same directory.
    It's just too easy to create copies that are picked up as if they were new
    files.

    BTW, why do you need copies of the files, with new name, in the same
    directory? If the purpose is anything other than modifying one of them in
    place, AND if your drive is NTFS, you can use the MKLNK command to just
    create additional directory entries for each file, which is much faster as
    well as using less disk space.
    --
    HTH, Steve
     

Share This Page