Я предполагаю, что в C:\
есть папка XYZ
, в которой есть множество подпапок, и некоторые из них (или все) имеют File1.txt
, чтобы создать папку и переместить ее туда, вам может понадобиться:
@echo off
setlocal EnableDelayedExpansion
for /R "C:\XYZ\" %%A IN (File1.txt) do (
rem /* Find path of file excluded filename (dp=drive and path): */
set "drive_path=%%~dpA"
rem /* In this %%~dpA, replace '\' and ':\' according to OP's requirements: */
set "formatted=!drive_path:\=_!" & set "formatted=!formatted::=!"
rem /* Make the folder: */
md "F:\Destination\!formatted!"
rem /* Move the file there: */
move "%%~fA" "F:\Destination\!formatted!"
)
Приведенный выше код составляет путь в формате F:\Destination\C_XYZ_etc\File1.txt
.Как уже упоминалось в комментариях, вы также можете захотеть:
@echo off
setlocal EnableDelayedExpansion
for /R "C:\XYZ\" %%A IN (File1.txt) do (
rem /* Find path of file excluded filename (dp=drive and path): */
set "drive_path=%%~dpA"
rem /* In this %%~dpA, replace '\' and ':\' according to OP's requirements: */
set "formatted=!drive_path:\=!" & set "formatted=!formatted::=!"
rem /* Make the folder: */
md "F:\Destination\!formatted!"
rem /* Move the file there: */
move "%%~fA" "F:\Destination\!formatted!"
)
где это будет в формате F:\Destination\CXYZETC\File1.txt
.
Если есть несколько файлов, которые вы хотите проверить: (используя set /p
[inputот пользователя]):
@echo off
setlocal EnableDelayedExpansion
:files
set /p files=Please enter the files you want to check separated by spaces. Quote all filenames:
if not defined files (goto:files)
:loop
rem Loop through user input (filenames):
for %%A IN (%files%) do (
for /R "C:\XYZ\" %%B IN ("%%A") do (
rem /* Find path of file excluded filename (dp=drive and path): */
set "drive_path=%%~dpB"
rem /* In this %%~dpB, replace '\' and ':\' according to OP's requirements: */
set "formatted=!drive_path:\=!" & set "formatted=!formatted::=!"
rem /* Make the folder: */
md "F:\Destination\!formatted!"
rem /* Move the file there: */
move "%%~fB" "F:\Destination\!formatted!"
)
)
С аргументами (проще):
@echo off
setlocal EnableDelayedExpansion
:argument_check
if [%1] == [] (echo Action requires arguments^^! Please rerun from cmd specifying arguments^^! Remember to quote each filename^^! & exit /b 1)
:loop
rem Loop through arguments (filenames):
for %%A IN (%*) do (
for /R "C:\XYZ\" %%B IN ("%%A") do (
rem /* Find path of file excluded filename (dp=drive and path): */
set "drive_path=%%~dpB"
rem /* In this %%~dpB, replace '\' and ':\' according to OP's requirements: */
set "formatted=!drive_path:\=!" & set "formatted=!formatted::=!"
rem /* Make the folder: */
md "F:\Destination\!formatted!"
rem /* Move the file there: */
move "%%~fB" "F:\Destination\!formatted!"
)
)