Varyl
Varyl

Reputation: 276

Bat file find folder of file

So my many attempts to search for a solution have resulted in a million ways to find the folder of the bat file being executed, however what I am looking to do is find the folder for the filename being passed to the bat file.

Example:

C:\Temp\runthis.bat "C:\Blah\Ah Argh\rage.txt"

I want to get a string within that bat file that is simply "C:\Blah\Ah Argh\", alternatively I would also be able to work with getting a string of "rage.txt"

Editing to explain why: Looking to check for the filename within another txt file which is the directory listing of a ftp server to verify that a file successfully uploaded to it. Then if successful I need to move the file to a subfolder of the original folder \uploaded\ but we have many of these folders setup so I can't hard code it.

Thanks

Upvotes: 1

Views: 896

Answers (2)

dbenham
dbenham

Reputation: 130819

@echo off
The file path is %~dp1
The file name is %~nx1

The parameter modifiers are the same as for FOR variables.

Type 'HELP CALL' from a command prompt for a full list of parameter modifiers.

Upvotes: 3

GolezTrol
GolezTrol

Reputation: 116100

@echo off
if %1X==X echo Syntax: %0 "path"

rem  The for loop doesn't actually loop. You can split strings with it, but in 
rem  this case we don't. So there is only one iteration in which %%X will 
rem  contain the full path.

rem  Pass it %1, which is the first parameter. Note the quotes, which are 
rem  required if you don't add quotes around the parameter and optional (but 
rem  still valid) when you do.

for /F "delims=|" %%X in ("%1") do (

  rem  FOR LOOP variables can be used with certain modifiers, preceeded by a 
  rem  tilde. In this case I'm using d and p, which stand for drive and path,
  rem  effectively trimming the file name from the path.

  echo %%~dpX

  rem The ~n modifier selects the file name only. ~x is for extension

  echo %%~nxX
)

Upvotes: 1

Related Questions