Script CMD sposta cartelle
Uno script che mi è stato utile in certi momenti… e ora dismetto ma non credo sia importante tanto da tenerne traccia in un repo git e nonostante ciò preferisco non perdere…
Uno script che non fa altro che prendere in esame il parametro (file o folder, ossia cartella) e lo sposta in automatico in un’altra cartella allo stesso livello dell’alberatura.
@echo off
setlocal enabledelayedexpansion
REM --- 1. GESTIONE PERCORSI DI RETE (UNC) ---
REM Se lo script viene eseguito da un percorso di rete (\server\share),
REM il prompt di Windows (cmd) non lo supporta nativamente.
REM Utilizziamo pushd per mappare temporaneamente un'unità di rete.
if not defined UNC_RESTARTED (
echo %~f0 | findstr /b "\" >nul
if !errorlevel!==0 (
echo Avvio da percorso di rete (UNC) rilevato. Mappatura automatica in corso…
pushd "%~dp0"
set "UNC_RESTARTED=1"
call "%~f0" %*
popd
exit /b
)
)
echo Cartella attuale: %CD%
REM pause (decommentare per debug)
REM --- 2. VALIDAZIONE DELL'INPUT ---
REM Verifica che sia stato passato un argomento (nome o percorso della cartella)
if "%~1"=="" (
echo Uso: %~n0.bat NomeCartellaOPathCompleto
pause
exit /b 1
)
REM --- 3. RISOLUZIONE DEI PERCORSI E LOGICA DI SPOSTAMENTO ---
REM 3.1. Risoluzione del percorso assoluto della cartella sorgente
for %%F in ("%~1") do set "SRC=%%~fF"
REM 3.2. Estrazione della directory padre della sorgente
for %%P in ("!SRC!..") do set "SRC_PARENT=%%~fP"
REM 3.3. Verifica di sicurezza: la directory padre deve chiamarsi esattamente "da fare"
for %%N in ("!SRC_PARENT!") do set "PARENT_NAME=%%~nxN"
if /i "!PARENT_NAME!" NEQ "da fare" (
echo ERRORE: La cartella di origine non si trova all'interno di una directory "da fare".
echo Cartella padre rilevata: !SRC_PARENT!
pause
exit /b 1
)
REM 3.4. Estrazione del percorso base (directory "nonno", livello superiore a "da fare")
for %%B in ("!SRC_PARENT!..") do set "BASE=%%~fB"
REM 3.5. Costruzione del percorso assoluto per la cartella di destinazione
set "DEST=!BASE!\Protocollare (approvato - registrato)"
echo Origine: !SRC!
echo Destinazione: !DEST!
REM pause (decommentare per debug)
REM --- 4. VERIFICA ESISTENZA E SPOSTAMENTO ---
REM Controllo esistenza della cartella sorgente
if not exist "!SRC!" (
echo ERRORE: La cartella sorgente "!SRC!" non esiste.
pause
exit /b 1
)
REM Controllo esistenza della cartella di destinazione
if not exist "!DEST!" (
echo ERRORE: La directory di destinazione "!DEST!" non esiste.
echo.
echo Assicurarsi che la seguente directory sia stata creata correttamente:
echo !DEST!
pause
exit /b 1
)
echo.
echo Spostamento di "!SRC!" in "!DEST!" in corso…
REM pause (decommentare per debug)
move "!SRC!" "!DEST!"
if errorlevel 1 (
echo [X] Errore durante lo spostamento della cartella.
) else (
echo [V] Cartella spostata con successo!
)
pause
endlocal