This seems like is should be fairly simple, but I am having trouble getting a FOR loop in DOS to correctly report the current item it is evaluating.
I have a simple DOS batch file that loops through all files in a directory and renames them. Let's say for example my directory contains the following files:
File1.txt File2.txt File3.txt
I want to remove the TXT extension from each file. So my batch command looks something like:
@echo off
for %%F in ("*.txt") do ( echo %%F set tmpFile=%%F echo %tmpFile% set newFile=%tmpFile:~0,-4%.xml echo %newFile% )
My expected output would be:
File1.txt File1.txt File1.xml File2.txt File2.txt File2.xml File3.txt File3.txt File3.xml
Instead the output is:
File1.txt File3.txt File3.xml File2.txt File3.txt File3.xml File3.txt File3.txt File3.xml
It's as if setting %%F to a variable always uses the last file in the collection.
Am I doing something wrong? Please note I know there are better ways to simply change an extension. My finished batch file will perform many more actions, but I can't seem to get past this initial step.